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(); } }
public void Unload() { if (Status == TenantStatus.Loaded) { lock (_loadLock) { if (Status == TenantStatus.Loaded) { // invoke unload action MultiTenantConfig.Current.TenantUnloadAction.Invoke(this); Status = TenantStatus.Unloaded; } } } }
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; } } } }
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); }
public void SetStatus(TenantStatus status) { Status = status; StatusChangeDate = DateTime.UtcNow; }
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)); }
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(); } }
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; } }
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); } }
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); }