/// <summary> /// Ouverture d'une nouvelle instance de base de données. /// </summary> /// <param name="dataBaseName">Nom de la base de données.</param> /// <param name="description">Description du manager associé.</param> public void OpenDataBase(string dataBaseName, IManagerDescription description) { if (!IsEnabled) { return; } if (dataBaseName == null) { throw new ArgumentNullException("dataBaseName"); } CounterDataBase db = new CounterDataBase(dataBaseName); lock (this) { if (_map.ContainsKey(dataBaseName)) { return; } _map.Add(dataBaseName, db); if (description != null) { _mapDescription.Add(dataBaseName, description); foreach (IMonitoringStore store in _monitoringStore) { ExceptionSafeCreateDatabase(store, dataBaseName, description); } } } }
/// <summary> /// Ajoute la description d'une base de données. /// </summary> /// <param name="databaseName">Nom de la base de données.</param> /// <param name="description">Description.</param> public void AddDatabaseDescription(string databaseName, IManagerDescription description) { if (!this.DatabaseDefinition.ContainsKey(databaseName)) { this.DatabaseDefinition.Add(databaseName, description); } }
/// <summary> /// Ajoute un nouveau store. /// </summary> /// <param name="store">Store.</param> public void AddMonitoringStore(IMonitoringStore store) { if (!IsEnabled) { return; } if (store == null) { throw new ArgumentNullException("store"); } _monitoringStore.Add(store); // Enregistrement en base de données des bases déja enregistrés. foreach (string dataBaseName in _mapDescription.Keys) { IManagerDescription description = _mapDescription[dataBaseName]; ExceptionSafeCreateDatabase(store, dataBaseName, description); } // Enregistrement en base de données des compteurs déja enregistrés. foreach (ICounterDefinition counter in _counterDefinitionRepository.Values) { ExceptionSafeCreateCounter(store, counter); } lock (_resetEvent) { if (!_threadStarted) { _threadStarted = true; _storageThread.Start(); } } }
/// <summary> /// Réalise le rendu du contrôle. /// </summary> /// <param name="writer">Writer HTML.</param> public override void RenderControl(HtmlTextWriter writer) { if (writer == null) { throw new ArgumentNullException("writer"); } Context ctx = new Context(HttpContext.Current, this.ResolveUrl(this.HandlerPath)); ctx.ClearAction(); foreach (string param in _params.Keys) { ctx.AddParam(param, _params[param]); } writer.AddAttribute(HtmlTextWriterAttribute.Id, "managers"); writer.RenderBeginTag(HtmlTextWriterTag.Div); SortedDictionary <int, string> sortMap = new SortedDictionary <int, string>(); foreach (string databaseName in _databaseSet.DatabaseNames) { IManagerDescription description = this.DatabaseDefinition[databaseName]; sortMap.Add(description.Priority, databaseName); } foreach (int priority in sortMap.Keys) { string databaseName = sortMap[priority]; IManagerDescription description = this.DatabaseDefinition[databaseName]; writer.AddAttribute(HtmlTextWriterAttribute.Id, "manager"); writer.RenderBeginTag(HtmlTextWriterTag.Div); writer.WriteLine("<h1 style=\"background-image: url('" + this.ResolveUrl(this.HandlerPath) + "?CONTENT=img_manager&MON_ID=" + description.Image + "');\">"); writer.WriteLine(description.Name); writer.WriteLine("</h1>"); writer.WriteLine("<div id=\"description\">"); IHyperCube hyperCube = _databaseSet.GetDatabase(databaseName); HtmlPageHelper.ToSummary(hyperCube, ctx, writer); HtmlPageHelper.ToTable(hyperCube, ctx, writer); writer.WriteLine("</div>"); // description writer.RenderEndTag(); } writer.RenderEndTag(); }
/// <summary> /// Rendu html des managers. /// </summary> /// <param name="context">Context courant.</param> /// <param name="writer">Writer HTML.</param> private static void RenderManagers(Context context, HtmlTextWriter writer) { // Rendu du reset global. writer.Write("<div>"); writer.WriteLine("<ul>"); writer.Write("<li>"); writer.WriteLine(HtmlPageRenderer.GetLink(context.Reset("ALL"), "Tout remettre à zéro", true)); writer.WriteLine("</li>"); writer.WriteLine("</ul>"); writer.WriteLine("</div>"); writer.WriteLine("<div id=\"managers\">"); writer.WriteLine("</div>"); CurrentContext = context; foreach (IManager manager in ManagerContainer.Instance.ManagerList) { writer.WriteLine("<div id=\"manager\">"); IManagerDescription description = manager.Description; string name = (description != null) ? description.Name : manager.GetType().Name; string image = (description != null) ? description.Image : "misc.png"; writer.WriteLine("<h1 style=\"background-image: url('?CONTENT=img_manager&MON_ID=" + image + "');\">"); writer.WriteLine(name); writer.WriteLine("</h1>"); if (description != null) { writer.WriteLine("<div id=\"description\">"); // On ne passe pas le contexte opour ne pas créer une adhérence au niveau de l'API. description.ToHtml(writer); writer.WriteLine("</div>"); // description } writer.WriteLine("</div>"); // manager writer.WriteLine("</td>"); } writer.WriteLine("</div>"); }
/// <summary> /// Traite une requête pour du contenu attaché à la page. /// </summary> /// <param name="context">Contexte HTTP.</param> /// <param name="requestContext">Contexte de la requête.</param> private static void ProcessContentRequest(HttpContext context, Context requestContext) { if (requestContext.Content.Equals("img_manager")) { string mimeType = null; IManagerDescription managerDescription = null; foreach (IManager manager in ManagerContainer.Instance.ManagerList) { IManagerDescription description = manager.Description; if (description != null && description.Image != null && description.Image.Equals(requestContext.Id)) { managerDescription = description; break; } } if (managerDescription == null) { byte[] imageData = IR.Misc_png; mimeType = "image/png"; context.Response.ContentType = mimeType; context.Response.OutputStream.Write(imageData, 0, imageData.Length); } else { context.Response.ContentType = managerDescription.ImageMimeType; byte[] img = managerDescription.ImageData; context.Response.OutputStream.Write(img, 0, img.Length); } } else if (requestContext.Content.Equals("sparklines.png")) { context.Response.ContentType = "image/png"; CounterDataBase counterDataBase = Analytics.Instance.GetDataBase(requestContext.Id); HtmlPageRenderer.ToChart(counterDataBase.HyperCube, requestContext, context.Response.OutputStream); } else { throw new NotImplementedException(); } }
private static void ExceptionSafeCreateDatabase(IMonitoringStore store, string dataBaseName, IManagerDescription description) { try { store.CreateDatabase(new DatabaseDefinition(dataBaseName, description)); } catch (Exception e) { ILog log = LogManager.GetLogger("Monitoring"); if (log.IsErrorEnabled) { log.Error("Erreur de persistance du monitoring.", e); } } }
/// <summary> /// Crée une nouvelle définition de base de données associée à un manager. /// </summary> /// <param name="name">Nom de la base de données.</param> /// <param name="managerDescription">Description du manager.</param> internal DatabaseDefinition(string name, IManagerDescription managerDescription) { _managerDescription = managerDescription; _name = name; }