private void SubscribeToDispatcherLifeSignal(DispatcherId dispatcherId) { ReceivingBus.RemoveSubscription(typeof(LifeSignal), dispatcherId.LifeSignalSubscriptionId); ReceivingBus.Receive<LifeSignal>(dispatcherId.LifeSignalSubscriptionId, message => { lock (LatestLifeSignals) { var lifeSignal = (LifeSignal)message; if (!lifeSignal.IsExpired()) { LatestLifeSignals[dispatcherId] = lifeSignal; Log.Info("Received life signal from dispatcher '{0}'", dispatcherId); } } }); }
public static IEnumerable<DispatcherActivityLogEntry> GetDispatcherEvents(this MemoryTarget events, DispatcherId dispatcherId = null) { var allLogs = events.Logs.ToArray(); var supposedJsonLogs = allLogs.Select(logEntry => { var supposedJsonStart = logEntry.IndexOf('{'); var supposedJsonLength = logEntry.Length - supposedJsonStart; if ((supposedJsonStart > 0) && (supposedJsonLength > 2)) return logEntry.Substring(supposedJsonStart, supposedJsonLength); return null; }).Where(l => l != null && l.IsEnclosedByBraces()); var validJsonLogs = supposedJsonLogs.Select(l => l.FromString()).Where(l => l != null); var dispatcherEntries = validJsonLogs.ToArray(); if (dispatcherId != null) { dispatcherEntries = dispatcherEntries.Where( e => e.DispatcherId == dispatcherId ).ToArray(); } return dispatcherEntries; }
internal static void DispatcherActivity(this Logger log, DispatcherId dispatcherId, DispatcherActivity activity, Job job, JobStatus oldStatus, JobStatus? newStatus = null) { var logEntry = new DispatcherActivityLogEntry { DispatcherId = dispatcherId, Activity = activity, Job = job, OldStatus = oldStatus, NewStatus = newStatus ?? oldStatus }; log.Info(logEntry); }
internal static DispatcherActivityLogEntry Find(this MemoryTarget events, DispatcherId dispatcherId, DispatcherActivity activity, JobStatus newStatus) { var dispatcherEntries = events.GetDispatcherEvents(dispatcherId); return dispatcherEntries.SingleOrDefault( e => (e.Activity == activity) && (e.NewStatus == newStatus) ); }
private void NotifyDispatcherWasRestarted(DispatcherId dispatcherId) { Log.Info("Dispatcher {0} was restarted!", dispatcherId); var dispacherRestartedEvent = new DispatcherRestarted { DispatcherId = dispatcherId }; PublishingBus.Publish(dispacherRestartedEvent, StorageType.NonPersistent); }
private void NotifyDispatcherIsOffline(DispatcherId dispatcherId) { Log.Info("Dispatcher {0} is offline!", dispatcherId); var dispacherOfflineEvent = new DispatcherOffline { DispatcherId = dispatcherId }; PublishingBus.Publish(dispacherOfflineEvent, StorageType.NonPersistent); }
public bool HasReceivedLaunchConfirmationFrom(DispatcherId dispatcherId) { LaunchRecord[] launchRecords; lock (LaunchRecords) { launchRecords = LaunchRecords.ToArray(); } var launchRecord = launchRecords.SingleOrDefault(r => r.DispatcherId == dispatcherId); return launchRecord != null && launchRecord.IsConfirmed; }
internal static bool FindMatch(this MemoryTarget events, DispatcherId dispatcherId, DispatcherActivity activity) { var dispatcherEntries = events.GetDispatcherEvents(dispatcherId); return dispatcherEntries.Any(e => e.Activity == activity); }
private bool LastLifeSignalIsTooOldToConsiderTheDispatcherIsStillOnline(DispatcherId dispatcherId) { lock (LatestLifeSignals) { LifeSignal latestLifeSignal; if (LatestLifeSignals.TryGetValue(dispatcherId, out latestLifeSignal)) { return (DateTime.Now - latestLifeSignal.CreationDate) < MaxTimeDispatcherCanBeSilent; } return false; } }
private void CheckIfDispatcherIsOnline(DispatcherId dispatcherId) { Log.Info("Checking dispatcher {0}!", dispatcherId); var dispatcherOnline = LastLifeSignalIsTooOldToConsiderTheDispatcherIsStillOnline(dispatcherId); if (dispatcherOnline) { RemoveDispatcherFromRestartQueue(dispatcherId); } else { AddDispatcherToRestartQueue(dispatcherId); } }
private void StartDispatcher(DispatcherId dispatcherId) { Task.Run(() => { var dispatcherSettings = Settings.DispatcherSettings.Single(d => d.DispatcherId == dispatcherId); var bootstrapSettings = Settings.Clone(); bootstrapSettings.BootstrapJobs.Clear(); bootstrapSettings.DispatcherSettings.Clear(); bootstrapSettings.DispatcherSettings.Add(dispatcherSettings); Bootstrapper.Execute(bootstrapSettings); NotifyDispatcherWasRestarted(dispatcherId); }, CancellationTokenSource.Token); }
private void NotifyDispatcherHasBeenDetached(DispatcherId dispatcherId) { var dispatcherDetached = new DispatcherDetached { DispatcherId = dispatcherId }; Log.Debug("Publishing DispatcherDetached event of id {1} for DispatcherId {0}", dispatcherId, dispatcherDetached.MessageId); PublishingBus.Publish(dispatcherDetached, StorageType.NonPersistent); }
/// <summary> /// Serializa os dados. /// </summary> /// <param name="writer"></param> public void WriteXml(System.Xml.XmlWriter writer) { writer.WriteElementString("DispatcherId", SecurityNamespaces.Security, DispatcherId.ToString()); writer.WriteElementString("SenderName", SecurityNamespaces.Security, SenderName); writer.WriteElementString("Title", SecurityNamespaces.Security, (Title ?? MessageFormattable.Empty).Format()); writer.WriteElementString("Body", SecurityNamespaces.Security, (Body ?? MessageFormattable.Empty).Format()); writer.WriteElementString("Link", SecurityNamespaces.Security, Link); }
private void RegisterLaunchRequestFor(DispatcherId dispatcherId) { lock (LaunchRecords) { LaunchRecords.Add(new LaunchRecord { DispatcherId = dispatcherId, RequestTime = DateTime.Now }); } }
internal static void DispatcherActivity(this Logger log, DispatcherId dispatcherId, DispatcherActivity activity, PoisonPill poisonPill = null, Exception exception = null, bool logAsError = true) { var logEntry = new DispatcherActivityLogEntry { DispatcherId = dispatcherId, Activity = activity, PoisonPill = poisonPill, Exception = exception }; if (exception == null) { if (activity == Dispatching.DispatcherActivity.CheckingForUnfinishedJobs) log.Debug(logEntry); else log.Info(logEntry); } else if (logAsError) log.Error(exception, logEntry.ToString()); else log.Info(exception, logEntry.ToString()); }
private void AddDispatcherToRestartQueue(DispatcherId dispatcherId) { lock (OfflineDispatchers) { if (!OfflineDispatchers.Contains(dispatcherId)) { OfflineDispatchers.Add(dispatcherId); NotifyDispatcherIsOffline(dispatcherId); } } }
private void RemoveDispatcherFromRestartQueue(DispatcherId dispatcherId) { lock (OfflineDispatchers) { if (OfflineDispatchers.Contains(dispatcherId)) OfflineDispatchers.Remove(dispatcherId); NotifyDispatcherIsOnline(dispatcherId); } }
internal static DispatcherActivityLogEntry Find(this MemoryTarget events, DispatcherId dispatcherId, DispatcherActivity activity) { var dispatcherEntries = events.GetDispatcherEvents(dispatcherId); return dispatcherEntries.SingleOrDefault(e => e.Activity == activity); }
private void RegisterLaunchConfirmationFor(DispatcherId dispatcherId) { LaunchRecord[] launchRecords; lock (LaunchRecords) { launchRecords = LaunchRecords.ToArray(); } var launchRecord = launchRecords.FirstOrDefault(r => r.DispatcherId == dispatcherId && !r.IsConfirmed); if (launchRecord != null) launchRecord.ConfirmationTime = DateTime.Now; }