Esempio n. 1
0
        private IHttpActionResult Get(string id = null, bool?deep = null, bool?stat = null)
        {
            try
            {
                View view = GetView(null);

                if (view == null)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.ViewNameNotFound, AppViewName))));
                }

                if (string.IsNullOrEmpty(id))
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, Messages.IdIsMissing)));
                }

                if (!view.IsAllow())
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Forbidden, Messages.ActionIsUnauthorized)));
                }

                int?appId = Maps.Instance.AppExists(id, Convert.ToInt32(Maps.Instance.DuradosMap.Database.GetUserID()));
                if (!appId.HasValue)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.AppNotFound, id))));
                }

                SetRequestItemCurrentAppName(id);

                Map.Logger.Log(GetControllerNameForLog(ControllerContext), "myApp", "before get item", null, 5, null);

                var item = RestHelper.Get(view, appId.Value.ToString(), deep ?? false, view_BeforeSelect, view_AfterSelect);

                Map.Logger.Log(GetControllerNameForLog(ControllerContext), "myApp", "after get item", null, 5, null);

                if (item == null)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.AppNotFound, id))));
                }

                if (id != Maps.DuradosAppName && !BlobExists(id, appId.ToString()))
                {
                    if (item["DatabaseStatus"].Equals(1))
                    {
                        item["DatabaseStatus"] = 2;
                        Maps.Instance.DuradosMap.Logger.Log("uue", "myApps", "appName: " + id, null, -754, "141");
                    }
                    return(Ok(item));
                }

                View databaseView = null;
                try
                {
                    if (item["DatabaseStatus"].Equals(1))
                    {
                        databaseView = (View)Maps.Instance.GetMap(id).GetConfigDatabase().Views["Database"];
                    }
                }
                catch (Exception exception)
                {
                    try
                    {
                        Maps.Instance.DuradosMap.Logger.Log("Map", "Initiate", "Get", exception, 1, "failt to initiate " + id);
                    }
                    catch { }

                    try
                    {
                        HandleInitiationFailure(id);
                        try
                        {
                            if (item["DatabaseStatus"].Equals(1))
                            {
                                databaseView = (View)Maps.Instance.GetMap(id).GetConfigDatabase().Views["Database"];
                            }
                        }
                        catch
                        {
                        }
                    }
                    catch (Exception exception2)
                    {
                        try
                        {
                            Maps.Instance.DuradosMap.Logger.Log("Map", "Initiate", "HandleInitiationFailure", exception2, 1, "failt to HandleInitiationFailure " + id);
                        }
                        catch { }
                    }
                }

                if (databaseView == null)
                {
                    item.Add("settings", "");
                }
                else
                {
                    Dictionary <string, object> db = null;

                    try
                    {
                        db = RestHelper.Get(databaseView, "0", true, view_BeforeSelect, view_AfterSelect, true, true);
                    }
                    catch
                    {
                        if (item["DatabaseStatus"].Equals(2))
                        {
                            return(Ok(item));
                        }
                        else
                        {
                            return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.AppNotFound, id))));
                        }
                    }

                    item.Add("settings", db);
                }

                item.Add("connectionSource", RestHelper.GetConnectionSource(id));

                bool debugMode = false;
                try
                {
                    debugMode = SharedMemorySingeltone.Instance.Contains(id, SharedMemoryKey.DebugMode);
                }
                catch { }
                item.Add("debugMode", debugMode);

                if (deep.HasValue && deep.Value && item["DatabaseStatus"].Equals(1))
                {
                    bool reset = false;
                    if (stat.HasValue && stat.Value)
                    {
                        reset = true;
                    }
                    RestHelper.AddStat(item, id, reset);
                }
                else
                {
                    if (item["DatabaseStatus"].Equals((int)OnBoardingStatus.Error))
                    {
                        try
                        {
                            if (!item["DatabaseStatus"].Equals(2))
                            {
                                Map map = Maps.Instance.GetMap(id);
                                if (map != null)
                                {
                                    if (map.Database.TestConnection())
                                    {
                                        Maps.Instance.UpdateOnBoardingStatus(OnBoardingStatus.Ready, appId.Value.ToString());
                                    }
                                    //else
                                    //{
                                    //    Maps.Instance.Restart(id);
                                    //    if (Map.Database.TestConnection())
                                    //    {
                                    //        Maps.Instance.UpdateOnBoardingStatus(OnBoardingStatus.Ready, appId.Value.ToString());
                                    //    }
                                    //}
                                }
                            }
                        }
                        catch (Exception exception)
                        {
                            Map.Logger.Log("Map", "Initiate", "UpdateOnBoardingStatus", exception, 1, "Failed to Update OnBoarding Status");
                        }
                    }
                }


                return(Ok(item));
            }
            catch (Exception exception)
            {
                throw new BackAndApiUnexpectedResponseException(exception, this);
            }
        }