Пример #1
0
        public void Publish(HealthCheckAgentStart message)
        {
            IMonitorWang proxy = null;

            try
            {
                if (myFactory == null)
                {
                    myFactory = new ChannelFactory <IMonitorWang>(
                        new BasicHttpBinding(),
                        myConfig.Uri
                        );
                }

                proxy = myFactory.CreateChannel();
                proxy.CaptureAgentStart(message);
                ((IClientChannel)proxy).Close();
            }
            catch
            {
                if ((proxy != null) && (((IClientChannel)proxy).State == CommunicationState.Faulted))
                {
                    ((IClientChannel)proxy).Abort();
                }

                throw;
            }
        }
        public void Publish(HealthCheckAgentStart message)
        {
            var isSticky    = false;
            var textBuilder = new StringBuilder(string.Format("Agent on {0} started\n", message.Agent.AgentId));

            if ((message.Activities != null) && (message.Activities.Count > 0))
            {
                textBuilder.AppendFormat("{0} Activities loaded...\n", message.Activities.Count);
                message.Activities.ForEach(c => textBuilder.AppendFormat("{0}\n", c.Name));
            }
            if ((message.UnhealthyActivities != null) && (message.UnhealthyActivities.Count > 0))
            {
                textBuilder.Append("*** ATTENTION ***\n");
                textBuilder.AppendFormat("{0} Unheathly Activities...\n", message.UnhealthyActivities.Count);
                message.UnhealthyActivities.ForEach(c => textBuilder.AppendFormat("{0}\n", c.Name));
                isSticky = true;
            }
            if ((message.Checks != null) && (message.Checks.Count > 0))
            {
                textBuilder.AppendFormat("{0} Checks loaded...\n", message.Checks.Count);
                message.Checks.ForEach(c => textBuilder.AppendFormat("{0}\n", c.Name));
            }
            if ((message.UnhealthyChecks != null) && (message.UnhealthyChecks.Count > 0))
            {
                textBuilder.Append("*** ATTENTION ***\n");
                textBuilder.AppendFormat("{0} Unheathly Checks...\n", message.UnhealthyChecks.Count);
                message.UnhealthyChecks.ForEach(c => textBuilder.AppendFormat("{0}\n", c.Name));
                isSticky = true;
            }

            // remove CR from text as Growl doesn't like these...
            textBuilder.Replace("\r", string.Empty);

            var notification = new Notification(myGrowler.Config.AppId,
                                                myGrowler.Config.NotificationId, null,
                                                string.Format("{0} HealthCheck Agent",
                                                              message.Agent.SiteId),
                                                textBuilder.ToString())
            {
                Sticky   = isSticky,
                Priority = isSticky ? Priority.Emergency : Priority.Normal
            };

            myGrowler.Connection.Notify(notification);
        }
Пример #3
0
        public void Publish(HealthCheckAgentStart message)
        {
            myBus.Send <HealthCheckAgentStartNotification>(myConfig.OutputQueue,
                                                           m =>
            {
                m.Agent              = message.Agent;
                m.Id                 = message.Id;
                m.Checks             = message.Checks;
                m.Activities         = message.Activities;
                m.DiscoveryCompleted = message.DiscoveryCompleted;
                m.DiscoveryStarted   = message.DiscoveryStarted;

                if (!string.IsNullOrEmpty(myConfig.HttpGatewayUri))
                {
                    m.SetHttpToHeader(myConfig.HttpGatewayUri);
                }
            });
        }
Пример #4
0
        public void Publish(HealthCheckAgentStart message)
        {
            var data = SerialisationHelper <HealthCheckAgentStart> .DataContractSerialize(message);

            using (var cmd = SQLiteAdhocCommand.UsingSmartConnection(myConfig.ConnectionString)
                             .WithSql(SQLiteStatement.Create("INSERT INTO AgentData (")
                                      .Append("TypeId,EventType,SiteId,AgentId,GeneratedOnUtc,ReceivedOnUtc,Data,Version")
                                      .Append(") VALUES (")
                                      .InsertParameter("@pTypeId", message.Id).Append(",")
                                      .InsertParameter("@pEventType", "SessionStart").Append(",")
                                      .InsertParameter("@pSiteId", message.Agent.SiteId).Append(",")
                                      .InsertParameter("@pAgentId", message.Agent.AgentId).Append(",")
                                      .InsertParameter("@pGeneratedOnUtc", message.DiscoveryStarted).Append(",")
                                      .InsertParameter("@pReceivedOnUtc", DateTime.UtcNow).Append(",")
                                      .InsertParameter("@pData", data).Append(",")
                                      .InsertParameter("@pVersion", message.Id)
                                      .Append(")")))
            {
                cmd.ExecuteNonQuery();
            }
        }
Пример #5
0
 IMessenger IMessenger.Publish(HealthCheckAgentStart message)
 {
     myMessageBus.Send(message);
     return(this);
 }
Пример #6
0
 public static IMessenger Publish(HealthCheckAgentStart message)
 {
     return(myInstance.Publish(message));
 }
Пример #7
0
 public void Consume(HealthCheckAgentStart message)
 {
     Publish(message);
 }
Пример #8
0
 public IMessenger Publish(HealthCheckAgentStart message)
 {
     Sent.Add(message);
     return(this);
 }
Пример #9
0
 public void CaptureAgentStart(HealthCheckAgentStart session)
 {
     Messenger.Publish(session);
 }
Пример #10
0
        public override void Start()
        {
            // start the load process....
            var sessionInfo = new HealthCheckAgentStart
            {
                DiscoveryStarted = DateTime.UtcNow,
                Agent            = myAgentInfo
            };


            // load publishers
            IHealthCheckSessionPublisher[] sessionPublishers;
            mySessionPublisherLoader.Load(out sessionPublishers, p =>
            {
                if (!p.Status.IsHealthy())
                {
                    Logger.Debug("*** Session Publisher '{0}' reporting 'unhealthy', disabling it ***",
                                 p.FriendlyId);
                    return;
                }

                Messenger.Subscribe(p);
                Logger.Debug("Loaded Session Publisher '{0}'",
                             p.GetType().Name);
            });
            IHealthCheckResultPublisher[] resultPublishers;
            myResultPublisherLoader.Load(out resultPublishers, p =>
            {
                if (!p.Status.IsHealthy())
                {
                    Logger.Debug("*** Result Publisher '{0}' reporting 'unhealthy', disabling it ***",
                                 p.FriendlyId);
                    return;
                }

                Messenger.Subscribe(p);
                Logger.Debug("Loaded Result Publisher '{0}'",
                             p.GetType().Name);
            });

            // load activities...
            IActivityPlugin[] activities;
            if (myActivitiesLoader.Load(out activities))
            {
                activities.ToList().ForEach(a =>
                {
                    if (!a.Status.IsHealthy())
                    {
                        Logger.Debug("*** Activity '{0}' reporting 'unhealthy', skipping it ***", a.Identity.Name);
                        return;
                    }

                    myPlugins.Add(a);
                    Logger.Debug("Loaded Activity '{0}'", a.GetType().Name);
                });
            }

            // load health checks...
            IHealthCheckSchedulerPlugin[] healthChecks;
            myChecksLoader.Load(out healthChecks);
            healthChecks.ToList().ForEach(h =>
            {
                if (!h.Status.IsHealthy())
                {
                    Logger.Debug("*** HealthCheck '{0}' reporting 'unhealthy', skipping it ***", h.Identity.Name);
                    return;
                }

                myPlugins.Add(h);
                Logger.Debug("Loaded HealthCheck '{0}'", h.Identity.Name);
            });

            // extract check info, attach and publish it to a session message
            sessionInfo.DiscoveryCompleted = DateTime.UtcNow;
            sessionInfo.Checks             = (from healthCheck in healthChecks
                                              where healthCheck.Status.IsHealthy()
                                              select healthCheck.Identity).ToList();
            sessionInfo.UnhealthyChecks = (from healthCheck in healthChecks
                                           where !healthCheck.Status.IsHealthy()
                                           select healthCheck.Identity).ToList();
            sessionInfo.Activities = (from activity in activities
                                      where activity.Status.IsHealthy()
                                      select activity.Identity).ToList();
            sessionInfo.UnhealthyActivities = (from activity in activities
                                               where !activity.Status.IsHealthy()
                                               select activity.Identity).ToList();

            Messenger.Publish(sessionInfo);

            // listen for result messages being published
            // by the checks & activities - route to the
            // publisher-hub so it can decide how to handle them
            Messenger.Subscribe(this);
            // finally start the checks & activities
            base.Start();
        }