private ManagementReport BuildReport(trace.Trace trace, IEnumerable<Failure> failures)
        {
            ManagementReport report = new ManagementReport
            {
                ID = trace.Id.ToString(),
                State = new State()
                {
                    Execution = ExecutionState.Active,
                    Health = HealthState.OperationalWithFailures,
                    Failures = failures.ToArray()
                },
                DateTime = DateTime.UtcNow,
                SourceID = trace.Properties.ContainsKey(REPORT_SOURCE_ID_PROPERTY) ? trace.Properties[REPORT_SOURCE_ID_PROPERTY] as String : Properties.DefaultSourceId
            };

            return report;            
        }
 protected override void Send(ManagementReport report, String activityId, String agentId)
 {
     var reportJson = new Dictionary<String, Object>{
         {"ID", report.ID},
         {"SourceID", report.SourceID },
         {"DateTime", report.DateTime},
         {"State", new Dictionary<String, Object> {
                 {"Health", report.State.Health.ToString() },
                 {"Execution", report.State.Execution.ToString()},
                 {"Failures", (from f in report.State.Failures
                       select new Dictionary<String, Object> {
                            {"FailureID", f.FailureID},
                            {"SourceID", f.SourceID},
                            {"Details", f.Details}
                       }).ToArray()}
         }},
         {"Metrics", report.Metrics != null ? (from m in report.Metrics
                       select new Dictionary<String, Object> {
                            {"MetricID", m.MetricID},
                            {"SourceID", m.SourceID},
                            {"Reference", m.Reference},
                            {"Value", m.Value},
                            {"Details", m.Details},
                            {"CategoryID", m.CategoryID},
                            {"DateTime", m.DateTime }
                       }).ToArray() : null},
         {"ActivityID", activityId},
         {"AgentID", agentId},
         };
     
     var str = new StringWriter();
     var jsonSer = new Newtonsoft.Json.JsonSerializer();
     jsonSer.Serialize(str, reportJson);
     NetBrokerMessage brokerMessage = new NetBrokerMessage(str.ToString());
     this.brokerClient.Publish(brokerMessage, this.topic);
 }        
 protected abstract void Send(ManagementReport report, String activityId, String agentId);