//------------------------------------------------------------------------------ // // Method: ProcessStatusMetricEvent // //------------------------------------------------------------------------------ /// <summary> /// Writes a status metric event to the database. /// </summary> /// <param name="statusMetricEvent">The status metric event to write.</param> protected override void ProcessStatusMetricEvent(StatusMetricEventInstance statusMetricEvent) { StringBuilder sqlInsertStatement = new StringBuilder(); sqlInsertStatement.Append("INSERT "); sqlInsertStatement.Append("INTO StatusMetricInstances "); sqlInsertStatement.Append(" ( CtgrId, "); sqlInsertStatement.Append(" SmetId, "); sqlInsertStatement.Append(" [Value], "); sqlInsertStatement.Append(" [Timestamp] "); sqlInsertStatement.Append(" ) "); sqlInsertStatement.Append("SELECT Ctgr.CtgrId, "); sqlInsertStatement.Append(" Smet.SmetId, "); sqlInsertStatement.Append(" " + statusMetricEvent.Metric.Value.ToString() + ", "); sqlInsertStatement.Append(" '" + statusMetricEvent.EventTime.ToString("yyyy-MM-dd HH:mm:ss") + "' "); sqlInsertStatement.Append("FROM StatusMetrics Smet, "); sqlInsertStatement.Append(" Categories Ctgr "); sqlInsertStatement.Append("WHERE Smet.Name = '" + statusMetricEvent.Metric.Name + "' "); sqlInsertStatement.Append(" AND Ctgr.Name = '" + metricCategoryName + "';"); dbCommand.CommandText = sqlInsertStatement.ToString(); try { dbCommand.ExecuteNonQuery(); } catch (Exception e) { exceptionHandler.Handle(new Exception("Failed to insert instance of status metric '" + statusMetricEvent.Metric.Name + "'.", e)); } }
//------------------------------------------------------------------------------ // // Method: ProcessStatusMetricEvent // //------------------------------------------------------------------------------ /// <summary> /// Stores the value contained in the specified status metric event. /// </summary> /// <param name="statusMetricEvent">The status metric event.</param> protected override void ProcessStatusMetricEvent(StatusMetricEventInstance statusMetricEvent) { if (statusMetricLatestValues.ContainsKey(statusMetricEvent.MetricType) == false) { statusMetricLatestValues.Add(statusMetricEvent.MetricType, new StatusMetricValueContainer(statusMetricEvent.Metric)); } statusMetricLatestValues[statusMetricEvent.MetricType].Set(statusMetricEvent.Metric.Value); }
protected override void ProcessStatusMetricEvent(StatusMetricEventInstance statusMetricEvent) { StringBuilder stringBuilder = InitializeStringBuilder(statusMetricEvent.EventTime.ToLocalTime()); stringBuilder.Append(statusMetricEvent.Metric.Name); AppendSeparatorCharacter(stringBuilder); stringBuilder.Append(statusMetricEvent.Metric.Value); streamWriter.WriteLine(stringBuilder.ToString()); streamWriter.Flush(); }
//------------------------------------------------------------------------------ // // Method: ProcessStatusMetricEvent // //------------------------------------------------------------------------------ /// <summary> /// Processes a logged status metric event. /// </summary> /// <param name="statusMetricEvent">The status metric event to process.</param> /// <remarks>Implementations of this method define how a status metric event should be processed after it has been retrieved from the internal buffer queue. The event could for example be written to a database, or to the console.</remarks> protected abstract void ProcessStatusMetricEvent(StatusMetricEventInstance statusMetricEvent);