예제 #1
0
        public AutomatedSpectator(
            TimeSpan checkHealthPeriod,
            TimeSpan retentionPeriod,
            IStateEvaluator <TState> stateEvaluator, TState initialState)
            : base(stateEvaluator, retentionPeriod, initialState)
        {
            CheckHealthPeriod = checkHealthPeriod;

            _timer           = new System.Timers.Timer(CheckHealthPeriod.TotalMilliseconds);
            _timer.Elapsed  += (sender, args) => CheckHealth();
            _timer.AutoReset = true;
        }
예제 #2
0
    public SpectatorBase(IStateEvaluator <TState> stateEvaluator, TimeSpan retentionPeriod, TState initialState)
    {
        RetentionPeriod  = retentionPeriod;
        _state           = initialState;
        StateChangedDate = DateTime.UtcNow;

        _stateEvaluator = stateEvaluator;
        _stopwatch      = Stopwatch.StartNew();
        _probes         = new List <IProbe>();
        _journal        = new List <JournalRecord>();
        _journalLock    = new ReaderWriterLockSlim();
        _stateLock      = new ReaderWriterLockSlim();
    }
예제 #3
0
 public AlphaBetaAi(IStateEvaluator evaluator, int maxDepth = int.MaxValue)
 {
     this.evaluator = evaluator;
     this.maxDepth  = maxDepth;
 }
예제 #4
0
 public SingleTargetAi(int timeToSimulate, IStateEvaluator evaluator, IAi fastEnemyAi)
 {
     this.timeToSimulate = timeToSimulate;
     this.evaluator      = evaluator;
     this.fastEnemyAi    = fastEnemyAi;
 }
예제 #5
0
 public SystemSpectator(TimeSpan checkHealthPeriod, IStateEvaluator <SystemState> stateEvaluator, TimeSpan retentionPeriod, SystemState initialState)
     : base(checkHealthPeriod, retentionPeriod, stateEvaluator, initialState)
 {
     Console.WriteLine("SystemSpectator created");
 }
예제 #6
0
    public async Task TestSpectatorBase()
    {
        var probe1States = new Queue <ProbeResult>(new[]
                                                   { C(true), C(true), C(true), C(false), C(true), C(true), C(true), C(true) }
                                                   );

        var probe2States = new Queue <ProbeResult>(new[]
                                                   { C(true), C(true), C(false), C(true), C(false), C(true), C(true), C(true) }
                                                   );

        IProbe probe1 = new Probe("Test-1", () =>
        {
            var result       = probe1States.Dequeue();
            result.ProbeName = "Test-1";
            return(Task.FromResult(result));
        });

        IProbe probe2 = new Probe("Test-2", () =>
        {
            var result       = probe2States.Dequeue();
            result.ProbeName = "Test-2";
            return(Task.FromResult(result));
        });

        var stateEvaluatorMock = new Mock <IStateEvaluator <State> >();

        stateEvaluatorMock
        .Setup(o => o.Evaluate(
                   It.IsAny <State>(),
                   It.IsAny <DateTime>(),
                   It.IsAny <IReadOnlyCollection <JournalRecord> >()))
        .Returns((State currentState,
                  DateTime stateChangedLastTime,
                  IReadOnlyCollection <JournalRecord> journal) =>
        {
            var data = journal.TakeLast(3).ToImmutableList();

            var totalChecks  = data.Count;
            var failedChecks = data.Count(o => o.Values.Any(v => v.Success == false));

            if (failedChecks == 0)
            {
                return(State.Live);
            }

            if (failedChecks == 1)
            {
                return(State.Warning);
            }

            return(State.Down);
        });

        IStateEvaluator <State> stateEvaluator = stateEvaluatorMock.Object;
        TimeSpan retentionPeriod = TimeSpan.FromMinutes(10);

        var spectator = new SpectatorBase <State>(stateEvaluator, retentionPeriod, State.Unknown);


        spectator.AddProbe(probe1);
        spectator.AddProbe(probe2);

        var states = new List <State>();

        spectator.HealthChecked += (sender, args) =>
        {
        };

        spectator.StateChanged += (sender, args) =>
        {
            states.Add(args.State);
        };

        for (int i = 0; i < 8; i++)
        {
            spectator.CheckHealth();
        }

        var expected = new State[]
        {
            State.Live, State.Warning, State.Down, State.Warning, State.Live
        };


        Assert.Equal(expected.ToArray(), states.ToArray());
    }
예제 #7
0
 public GreedyAi(IStateEvaluator evaluator)
 {
     this.evaluator = evaluator;
 }