Ejemplo n.º 1
0
        private void SaveTenant(DbFactory dbFactory, string alias, TenantStatus status, string newAlias = null, string whereCondition = null)
        {
            using (var connection = dbFactory.OpenConnection())
            {
                if (newAlias == null)
                {
                    newAlias = alias;
                }
                else if (newAlias != alias)
                {
                    newAlias = GetUniqAlias(connection, newAlias);
                }

                var commandText = string.Format(
                    "update tenants_tenants " +
                    "set " +
                    "  status={0}, " +
                    "  alias = '{1}', " +
                    "  last_modified='{2}', " +
                    "  statuschanged='{2}' " +
                    "where alias = '{3}'",
                    status.ToString("d"),
                    newAlias,
                    DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
                    alias);

                if (!string.IsNullOrEmpty(whereCondition))
                {
                    commandText += (" and " + whereCondition);
                }

                connection.CreateCommand(commandText).WithTimeout(120).ExecuteNonQuery();
            }
        }
Ejemplo n.º 2
0
        public void Unload()
        {
            if (Status == TenantStatus.Loaded)
            {
                lock (_loadLock)
                {
                    if (Status == TenantStatus.Loaded)
                    {
                        // invoke unload action
                        MultiTenantConfig.Current.TenantUnloadAction.Invoke(this);

                        Status = TenantStatus.Unloaded;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void Load(HttpContext context)
        {
            if (Status == TenantStatus.Unloaded)
            {
                lock (_loadLock)
                {
                    if (Status == TenantStatus.Unloaded)
                    {
                        // invoke load action
                        MultiTenantConfig.Current.TenantLoadAction.Invoke(this);

                        Status = TenantStatus.Loaded;
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public void Run()
        {
            _isRecycling = false;
            TenantStatus = TenantStatus.Starting;
            Trace.TraceInformation("tenant {0} starting", TenantNumber);
            var container = _blobClient.GetContainerReference("locks");
            var blob      = container.GetBlockBlobReference("tenant" + TenantNumber);

            var amITheLeader = AzureLeaderElectionProvider.AmITheLeader;
            var tenantStatus = GetTenantStatus();

            if (amITheLeader == false && tenantStatus != TenantStatus.Started)
            {
                Trace.TraceInformation("Tenant {0} not started on the leader \t\t Recycling tenant", TenantNumber);
                return; //recycle tenant
            }

            using (var arl = new AutoRenewLease(blob))
            {
                if (arl.HasLease)
                {
                    Trace.TraceInformation("tenant {0} setup...", TenantNumber);
                    Thread.Sleep(10000);
                    Trace.TraceInformation("tenant {0} setup done", TenantNumber);
                }
                else
                {
                    Trace.TraceInformation("Lock exception on tenant {0} \t Recycle tenant", TenantNumber);
                    return; // recycle tenant
                }
            } // lease is released here
            Trace.TraceInformation("tenant {0} started", TenantNumber);
            TenantStatus = TenantStatus.Started;
            while (true)
            {
                GenerateEvent();
                Tick();
                if (_isRecycling)
                {
                    return;
                }
            }
        }
        public async Task <TenantStatus> GetStatus()
        {
            var status = await this.StateManager.TryGetStateAsync <StatusHistory>("statusHistory");

            var internalIp = await this.StateManager.TryGetStateAsync <string>("internalIp");

            var tenantName = await this.StateManager.TryGetStateAsync <string>("tenantName");

            var externalEndpoint = await this.StateManager.TryGetStateAsync <string>("externalEndpoint");

            var rconEndpoint = await this.StateManager.TryGetStateAsync <string>("rconEndpoint");


            var tenantStatus = new TenantStatus(machine.State);

            tenantStatus.History          = status.HasValue ? status.Value : new StatusHistory(machine.State);
            tenantStatus.TenantName       = tenantName.HasValue ? tenantName.Value : string.Empty;
            tenantStatus.InternalIp       = internalIp.HasValue ? internalIp.Value : string.Empty;
            tenantStatus.ExternalEndPoint = externalEndpoint.HasValue ? externalEndpoint.Value : string.Empty;
            tenantStatus.RconEndpoint     = rconEndpoint.HasValue ? rconEndpoint.Value : string.Empty;


            return(tenantStatus);
        }
Ejemplo n.º 6
0
 public void SetStatus(TenantStatus status)
 {
     Status           = status;
     StatusChangeDate = DateTime.UtcNow;
 }
Ejemplo n.º 7
0
        public void ProcessRequest(HttpContext context)
        {
            var tenant   = context.Session["TenantID"];
            int tenantId = tenant as int? ?? -1;

            if (tenantId == -1)
            {
                tenantId = Core.Utilities.Tenant.GetMasterID();
            }

            var sessionTool  = new SessionTools(context.Session);
            var cachedStatus = sessionTool.GetCache(context.Cache, CacheKey.Status, tenantId) as JsonStatus;

            try
            {
                if (cachedStatus != null)
                {
                    context.Response.ContentType = "application/json";
                    context.Response.Write(JsonConvert.SerializeObject(cachedStatus));
                    return;
                }
            }
            catch (Exception ex)
            {
                this.Log().Error("Error looking up status data in cache: {0}", ex.Message);
            }

            var jsonResponse = new JsonStatus();

            try
            {
                var result = new TenantStatus(tenantId).CurrentStatus();
                jsonResponse.RegisteredPatrons    = result.RegisteredPatrons;
                jsonResponse.PointsEarned         = result.PointsEarned;
                jsonResponse.PointsEarnedReading  = result.PointsEarnedReading;
                jsonResponse.ChallengesCompleted  = result.ChallengesCompleted;
                jsonResponse.SecretCodesRedeemed  = result.SecretCodesRedeemed;
                jsonResponse.AdventuresCompleted  = result.AdventuresCompleted;
                jsonResponse.BadgesAwarded        = result.BadgesAwarded;
                jsonResponse.RedeemedProgramCodes = result.RedeemedProgramCodes;
                jsonResponse.Since   = "All Participants";
                jsonResponse.Success = true;
            }
            catch (Exception ex)
            {
                this.Log().Error("Status update error: {0}", ex.Message);
                jsonResponse.Success = false;
            }

            if (jsonResponse.Success)
            {
                try
                {
                    DateTime cacheUntil = DateTime.UtcNow.AddSeconds(30);
                    if (sessionTool.GetCache(context.Cache, CacheKey.Status, tenantId) == null)
                    {
                        //this.Log().Debug("Caching status data until {0}",
                        //                 cacheUntil.ToLocalTime().ToLongTimeString());
                        string tenantCacheKey = sessionTool.GetTenantCacheKey(CacheKey.Status, tenantId);
                        context.Cache.Insert(tenantCacheKey,
                                             jsonResponse,
                                             null,
                                             cacheUntil,
                                             System.Web.Caching.Cache.NoSlidingExpiration,
                                             System.Web.Caching.CacheItemPriority.Default,
                                             null);
                    }
                }
                catch (Exception ex)
                {
                    this.Log().Error("Error caching status response: {0}", ex.Message);
                }
            }

            context.Response.ContentType = "application/json";
            context.Response.Write(JsonConvert.SerializeObject(jsonResponse));
        }
Ejemplo n.º 8
0
 public void SetStatus(TenantStatus status)
 {
     Status = status;
     StatusChangeDate = DateTime.UtcNow;
 }
        private void SaveTenant(DbFactory dbFactory, TenantStatus status, string newAlias = null, string whereCondition = null)
        {
            using (var connection = dbFactory.OpenConnection("core"))
            {
                if (newAlias == null)
                {
                    newAlias = Tenant.TenantAlias;
                }
                else if (newAlias != Tenant.TenantAlias)
                {
                    newAlias = GetUniqAlias(connection, newAlias);
                }

                var commandText = string.Format(
                    "update tenants_tenants " +
                    "set " +
                    "  status={0}, " +
                    "  alias = '{1}', " +
                    "  last_modified='{2}', " +
                    "  statuschanged='{2}' " +
                    "where alias = '{3}'",
                    status.ToString("d"),
                    newAlias,
                    DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
                    Tenant.TenantAlias);

                if (!string.IsNullOrEmpty(whereCondition))
                    commandText += (" and " + whereCondition);

                connection.CreateCommand(commandText).WithTimeout(120).ExecuteNonQuery();
            }
        }
Ejemplo n.º 10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                var crLoginHtml = DAL.SRPSettings.GetSettingValue("CRLoginHtml");
                if (!string.IsNullOrEmpty(crLoginHtml))
                {
                    CRLoginHtml.Text    = crLoginHtml;
                    CRLoginHtml.Visible = true;
                }
                else
                {
                    CRLoginHtml.Visible = false;
                }

                var defaultRibbon = StandardModuleRibbons.DefaultRibbon();
                if (defaultRibbon.Count > 0)
                {
                    SetPageRibbon(defaultRibbon);
                }
            }
            if (CRTenantID != null)
            {
                var result = new TenantStatus((int)CRTenantID).CurrentStatus();
                RegisteredPatrons.Text    = result.RegisteredPatrons.ToString("N0");
                PointsEarned.Text         = result.PointsEarned.ToString("N0");
                PointsEarnedReading.Text  = result.PointsEarnedReading.ToString("N0");
                ChallengesCompleted.Text  = result.ChallengesCompleted.ToString("N0");
                AdventuresCompleted.Text  = result.AdventuresCompleted.ToString("N0");
                BadgesAwarded.Text        = result.BadgesAwarded.ToString("N0");
                SecretCodesRedeemed.Text  = result.SecretCodesRedeemed.ToString("N0");
                ProgramCodesRedeemed.Text = result.RedeemedProgramCodes.ToString("N0");

                if (DAL.ProgramCodes.GetCountByTenantId((int)CRTenantID) > 0)
                {
                    ProgramCodesDiv.Visible = true;
                    var    redeemed = result.SecretCodesRedeemed.ToString();
                    string codeName = StringResources.getString("myaccount-program-reward-code");
                    if (!codeName.EndsWith("s"))
                    {
                        codeName += "s";
                    }
                    ProgramRewardCodeLabel.Text = codeName;
                }
                else
                {
                    ProgramCodesDiv.Visible = false;
                }
                MasterPage.PageTitle = "At-a-glance Program Status - Items Earned by Patrons";

                var tenant = GRA.SRP.Core.Utilities.Tenant.FetchObject((int)CRTenantID);
                OrganizationName.Text = tenant.LandingName;

                var bannerPath = new Logic.Banner().GetBannerPath(
                    DAL.Programs.GetDefaultProgramID().ToString(),
                    Server);

                ProgramImage.ImageUrl = bannerPath.Item1;
                ProgramImage.CssClass = new WebTools().CssEnsureClass("img-rounded",
                                                                      ProgramImage.CssClass);

                StatusPanel.Visible = true;
            }
            else
            {
                MasterPage.PageTitle = "Control Room";
                StatusPanel.Visible  = false;
            }
        }
Ejemplo n.º 11
0
        protected void UpdateReport()
        {
            var ts = new TenantStatus((int)CRTenantID);

            if (ProgramList.SelectedValue != "0")
            {
                ts.ProgramId = int.Parse(ProgramList.SelectedValue);
            }
            if (LibraryBranchList.SelectedValue != "0")
            {
                ts.BranchId = int.Parse(LibraryBranchList.SelectedValue);
            }
            else
            {
                if (LibraryDistrictList.SelectedValue != "0")
                {
                    ts.DistrictId = int.Parse(LibraryDistrictList.SelectedValue);
                }
            }
            var result = ts.CurrentStatus();

            RegisteredPatrons.Text    = result.RegisteredPatrons.ToString("N0");
            PointsEarned.Text         = result.PointsEarned.ToString("N0");
            PointsEarnedReading.Text  = result.PointsEarnedReading.ToString("N0");
            ChallengesCompleted.Text  = result.ChallengesCompleted.ToString("N0");
            AdventuresCompleted.Text  = result.AdventuresCompleted.ToString("N0");
            BadgesAwarded.Text        = result.BadgesAwarded.ToString("N0");
            SecretCodesRedeemed.Text  = result.SecretCodesRedeemed.ToString("N0");
            ProgramCodesRedeemed.Text = result.RedeemedProgramCodes.ToString("N0");

            if (DAL.ProgramCodes.GetCountByTenantId((int)CRTenantID) > 0)
            {
                ProgramCodesDiv.Visible = true;
                var    redeemed = result.SecretCodesRedeemed.ToString();
                string codeName = StringResources.getString("myaccount-program-reward-code");
                if (!codeName.EndsWith("s"))
                {
                    codeName += "s";
                }
                ProgramRewardCodeLabel.Text = codeName;
            }
            else
            {
                ProgramCodesDiv.Visible = false;
            }

            ProgramName.Text  = ProgramList.SelectedItem.Text;
            DistrictName.Text = LibraryDistrictList.SelectedItem.Text;
            BranchName.Text   = LibraryBranchList.SelectedItem.Text;

            var selectedProgram = ProgramList.SelectedValue;

            if (selectedProgram == "0")
            {
                selectedProgram = DAL.Programs.GetDefaultProgramID().ToString();
            }

            var defaultBannerPath     = string.Format("~/images/Banners/{0}.png", selectedProgram);
            var defaultBannerFilePath = Server.MapPath(defaultBannerPath);

            if (System.IO.File.Exists(defaultBannerFilePath))
            {
                ProgramImage.ImageUrl = defaultBannerPath;
                ProgramImage.CssClass = new WebTools().CssRemoveClass("img-rounded", ProgramImage.CssClass);
            }
            else
            {
                ProgramImage.ImageUrl = "~/images/meadow.jpg";
                ProgramImage.CssClass = new WebTools().CssEnsureClass("img-rounded", ProgramImage.CssClass);
            }
        }
Ejemplo n.º 12
0
        protected void UpdateReport()
        {
            if (CRTenantID == null)
            {
                this.Log().Error("CRTenantID is null, unable to call UpdateReport()");
                return;
            }
            var ts = new TenantStatus((int)CRTenantID);

            if (ProgramList.SelectedValue != "0")
            {
                ts.ProgramId = int.Parse(ProgramList.SelectedValue);
            }
            if (LibraryBranchList.SelectedValue != "0")
            {
                ts.BranchId = int.Parse(LibraryBranchList.SelectedValue);
            }
            else
            {
                if (LibraryDistrictList.SelectedValue != "0")
                {
                    ts.DistrictId = int.Parse(LibraryDistrictList.SelectedValue);
                }
            }
            var result = ts.CurrentStatus();

            RegisteredPatrons.Text    = result.RegisteredPatrons.ToString("N0");
            PointsEarned.Text         = result.PointsEarned.ToString("N0");
            PointsEarnedReading.Text  = result.PointsEarnedReading.ToString("N0");
            ChallengesCompleted.Text  = result.ChallengesCompleted.ToString("N0");
            AdventuresCompleted.Text  = result.AdventuresCompleted.ToString("N0");
            BadgesAwarded.Text        = result.BadgesAwarded.ToString("N0");
            SecretCodesRedeemed.Text  = result.SecretCodesRedeemed.ToString("N0");
            ProgramCodesRedeemed.Text = result.RedeemedProgramCodes.ToString("N0");

            if (DAL.ProgramCodes.GetCountByTenantId((int)CRTenantID) > 0)
            {
                ProgramCodesDiv.Visible = true;
                var    redeemed = result.SecretCodesRedeemed.ToString();
                string codeName = StringResources.getString("myaccount-program-reward-code");
                if (!codeName.EndsWith("s"))
                {
                    codeName += "s";
                }
                ProgramRewardCodeLabel.Text = codeName;
            }
            else
            {
                ProgramCodesDiv.Visible = false;
            }

            ProgramName.Text  = ProgramList.SelectedItem.Text;
            DistrictName.Text = LibraryDistrictList.SelectedItem.Text;
            BranchName.Text   = LibraryBranchList.SelectedItem.Text;

            var selectedProgram = ProgramList.SelectedValue;

            if (selectedProgram == "0")
            {
                selectedProgram = DAL.Programs.GetDefaultProgramID().ToString();
            }

            var bannerPath = new Logic.Banner().GetBannerPath(selectedProgram, Server);

            ProgramImage.ImageUrl = bannerPath.Item1;
            ProgramImage.CssClass = new WebTools().CssEnsureClass("img-rounded",
                                                                  ProgramImage.CssClass);
        }