Exemple #1
0
        public Task StartMonitor(CancellationToken externalCancellationToken = default(CancellationToken))
        {
            if (MonitorState == MonitorState.Running)
            {
                Log.Error("Trying to run a running monitor");
                return(Task.CompletedTask);
            }
            CancellationTokenSource = new CancellationTokenSource();
            //Link the current cancellation token with the given one, for support external cancellation
            if (externalCancellationToken != default(CancellationToken))
            {
                CancellationTokenSource =
                    CancellationTokenSource.CreateLinkedTokenSource(externalCancellationToken,
                                                                    CancellationTokenSource.Token);
                CancellationTokenSource.Token.Register(UpdateState);
            }

            Prepare();
            MonitorState = MonitorState.Prepared;
            Log.Information("Monitor {@Monitor} State: {@MonitorState}", this.GetType().Name, MonitorState);
            CancellationToken token = CancellationTokenSource.Token;

            return(Task.Factory.StartNew(() =>
            {
                MonitorState = MonitorState.Running;
                Log.Information("Monitor {@Monitor} State: {@MonitorState}", this.GetType().Name, MonitorState);
                using (LogContext.PushProperty("MonitorName", this.GetType().Name))
                {
                    while (!CancellationTokenSource.IsCancellationRequested)
                    {
                        MonitorResult monitorResult = Action();
                        Log.Information("-------------  {@monitorResult}  -------------", monitorResult.ResultState);
                        if (monitorResult.ResultState == ResultState.FAIL)
                        {
                            OnError(monitorResult);
                        }

                        try
                        {
                            Task.Delay(MonitorSettings.SamplingRate, token).Wait();
                        }
                        catch (Exception)
                        {
                            break;
                        }
                    }
                }
            }, token));
        }
Exemple #2
0
 protected virtual void OnError(MonitorResult monitorResult)
 {
     ErrorEvent?.Invoke(this, monitorResult);
 }