コード例 #1
0
        private void TestTriggerChannel(TriggerChannel channel, string[] urls, bool isSensor, ChannelItem channelItem = null)
        {
            var countOverride = new Dictionary <Content, int>
            {
                [Content.Sensors] = isSensor ? 2 : 0
            };

            var itemOverride = channelItem != null
                ? new Dictionary <Content, BaseItem[]>
            {
                [Content.Channels] = new[] { channelItem }
            }
                : null;

            var parameters = new ThresholdTriggerParameters(1001)
            {
                Channel = channel
            };

            Execute(
                c => c.AddNotificationTrigger(parameters, false),
                urls,
                countOverride,
                itemOverride
                );
        }
コード例 #2
0
        public void ThresholdTriggerParameters_Create_FromExistingTrigger()
        {
            var trigger    = GetMultipleItems().First(t => t.Type == TriggerType.Threshold);
            var parameters = new ThresholdTriggerParameters(1234, trigger);

            TriggerParameters_Create_FromExistingTrigger(trigger, parameters);
        }
コード例 #3
0
        public async Task AddNotificationTrigger_EnumToSensorAsync()
        {
            var client = Initialize_Client(new SetNotificationTriggerResponse());

            var parameters = new ThresholdTriggerParameters(1001);

            await AssertEx.ThrowsAsync <InvalidOperationException>(async() => await client.AddNotificationTriggerAsync(parameters), "Channel 'Primary' is not a valid value for sensor");
        }
コード例 #4
0
        public void AddNotificationTrigger_EnumToSensor()
        {
            var client = Initialize_Client(new SetNotificationTriggerResponse());

            var parameters = new ThresholdTriggerParameters(1001);

            AssertEx.Throws <InvalidOperationException>(() => client.AddNotificationTrigger(parameters), "Channel 'Primary' is not a valid value for sensor");
        }
コード例 #5
0
        public async Task AddNotificationTrigger_SupportedTypeAsync()
        {
            var client = Initialize_Client(new SetNotificationTriggerResponse());

            var parameters = new ThresholdTriggerParameters(1001)
            {
                Channel = new TriggerChannel(1)
            };

            await client.AddNotificationTriggerAsync(parameters, false);
        }
コード例 #6
0
        public async Task SetNotificationTrigger_SetsAChannel_OnASensorAsync()
        {
            var client = Initialize_Client(new SetNotificationTriggerResponse());

            var parameters = new ThresholdTriggerParameters(1001, 1)
            {
                Channel = (await client.GetChannelsAsync(1001)).First()
            };

            await client.SetNotificationTriggerAsync(parameters);
        }
コード例 #7
0
        public void SetNotificationTrigger_SetsAChannel_OnASensor()
        {
            var client = Initialize_Client(new SetNotificationTriggerResponse());

            var parameters = new ThresholdTriggerParameters(1001, 1)
            {
                Channel = client.GetChannels(1001).First()
            };

            client.SetNotificationTrigger(parameters);
        }
コード例 #8
0
        private void TestTriggerChannel(int objectId, TriggerChannel channel, Func <object, object, string, bool> validator = null)
        {
            var parameters = new ThresholdTriggerParameters(objectId)
            {
                Channel = channel
            };

            DoubleAddRemoveTrigger(
                parameters,
                t => new ThresholdTriggerParameters(objectId, t),
                validator
                );
        }
コード例 #9
0
        public void ThresholdTriggerParameters_AllProperties_HaveValues()
        {
            var parameters = new ThresholdTriggerParameters(1)
            {
                Channel               = TriggerChannel.Total,
                Condition             = TriggerCondition.Above,
                Latency               = 30,
                OffNotificationAction = base.GetNotificationAction(),
                OnNotificationAction  = base.GetNotificationAction(),
                Threshold             = 3
            };

            TriggerParameters_AllProperties_HaveValues(parameters);
        }
コード例 #10
0
        public void Action_NotificationTrigger_AddWithCustomization_Threshold()
        {
            var actions = client.GetNotificationActions();

            var parameters = new ThresholdTriggerParameters(Settings.Probe)
            {
                OnNotificationAction  = actions.First(),
                OffNotificationAction = actions.Skip(0).First(),
                Latency   = 40,
                Threshold = 4,
                Condition = TriggerCondition.Equals,
                Channel   = TriggerChannel.Total
            };

            AddRemoveTrigger(parameters, false);
        }
コード例 #11
0
        private void AddInvalidTrigger()
        {
            var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
            var engine       = client.GetInternalProperty("RequestEngine");
            var methods      = engine.GetType().GetMethods(bindingFlags).Where(m => m.Name == "ExecuteRequest").ToList();
            var method       = methods.First(m => m.GetParameters().Any(p => p.ParameterType.Name == "IHtmlParameters"));

            var channel = client.GetChannels(Settings.ChannelSensor).First(c => c.Id == Settings.Channel);

            var param = new ThresholdTriggerParameters(Settings.UpSensor)
            {
                Channel = channel
            };

            method.Invoke(engine, new object[] { param, null });
        }
コード例 #12
0
        public async Task AddNotificationTrigger_ChannelToContainerAsync()
        {
            var dictionary = new Dictionary <Content, int>
            {
                [Content.Sensors] = 0
            };

            var client = Initialize_Client(new SetNotificationTriggerResponse(dictionary));

            var parameters = new ThresholdTriggerParameters(1001)
            {
                Channel = new TriggerChannel(1)
            };

            await AssertEx.ThrowsAsync <InvalidOperationException>(async() => await client.AddNotificationTriggerAsync(parameters), "Channel ID '1' is not a valid channel for Device, Group or Probe");
        }
コード例 #13
0
        public void AddNotificationTrigger_ChannelToContainer()
        {
            var dictionary = new Dictionary <Content, int>
            {
                [Content.Sensors] = 0
            };

            var client = Initialize_Client(new SetNotificationTriggerResponse(dictionary));

            var parameters = new ThresholdTriggerParameters(1001)
            {
                Channel = new TriggerChannel(1)
            };

            AssertEx.Throws <InvalidOperationException>(() => client.AddNotificationTrigger(parameters), "Channel '1' is not a valid value for Device, Group or Probe");
        }
コード例 #14
0
        private void CloneTrigger()
        {
            TriggerParameters parameters;

            switch (Trigger.Type)
            {
            case TriggerType.Change:
                parameters = new ChangeTriggerParameters(DestinationId, Trigger);
                break;

            case TriggerType.State:
                parameters = new StateTriggerParameters(DestinationId, Trigger);
                break;

            case TriggerType.Speed:
                parameters = new SpeedTriggerParameters(DestinationId, Trigger);
                break;

            case TriggerType.Threshold:
                parameters = new ThresholdTriggerParameters(DestinationId, Trigger);
                break;

            case TriggerType.Volume:
                parameters = new VolumeTriggerParameters(DestinationId, Trigger);
                break;

            default:
                throw new NotImplementedException($"Handler of trigger type '{Trigger.Type}' is not implemented.");
            }

            if (Resolve)
            {
                var triggers = client.AddNotificationTriggerInternal(parameters, true, CancellationToken, DisplayResolutionError, ShouldStop);

                foreach (var obj in triggers)
                {
                    WriteObject(obj);
                }
            }
            else
            {
                client.AddNotificationTrigger(parameters);
            }
        }
コード例 #15
0
        private async Task ResolvesAsync(bool resolve)
        {
            var device         = (await client.GetDevicesAsync(Property.Id, Settings.Device)).Single();
            var deviceTriggers = (await client.GetNotificationTriggersAsync(device.Id)).Where(t => t.Type == TriggerType.Threshold).ToList();

            AssertEx.AreEqual(1, deviceTriggers.Count, "Found incorrect number of source triggers");

            var probe        = (await client.GetProbesAsync(Property.Id, Settings.Probe)).Single();
            var probeTrggers = (await client.GetNotificationTriggersAsync(probe.Id)).Where(t => t.Type == TriggerType.Threshold).ToList();

            AssertEx.AreEqual(0, probeTrggers.Count, "Found incorrect number of existing triggers on target object");

            var parameters = new ThresholdTriggerParameters(Settings.Probe, deviceTriggers.Single());
            var newTrigger = await client.AddNotificationTriggerAsync(parameters, resolve);

            var manualTrigger = (await client.GetNotificationTriggersAsync(probe.Id)).Where(t => t.Type == TriggerType.Threshold).ToList();

            try
            {
                if (resolve)
                {
                    AssertEx.AreEqual(1, manualTrigger.Count, "Found incorrect number of new triggers on target object");

                    AssertEx.AreEqual(manualTrigger.Single().ParentId, newTrigger.ParentId, "Parent ID was not correct");
                    AssertEx.AreEqual(manualTrigger.Single().SubId, newTrigger.SubId, "Sub ID was not correct");
                }
                else
                {
                    AssertEx.AreEqual(null, newTrigger, "New trigger was not null");
                }
            }
            finally
            {
                if (resolve)
                {
                    await client.RemoveNotificationTriggerAsync(newTrigger);
                }
                else
                {
                    await client.RemoveNotificationTriggerAsync(manualTrigger.Single());
                }
            }
        }
コード例 #16
0
        private void TestTriggerChannel(TriggerChannel channel, string[] urls, bool isSensor, ChannelItem channelItem = null)
        {
            var client = Initialize_Client(new AddressValidatorResponse(urls)
            {
                CountOverride = new Dictionary <Content, int>
                {
                    [Content.Sensors] = isSensor ? 2 : 0
                },
                ItemOverride = channelItem != null ? new Dictionary <Content, BaseItem[]>
                {
                    [Content.Channels] = new[] { channelItem }
                } : null
            });

            var parameters = new ThresholdTriggerParameters(1001)
            {
                Channel = channel
            };

            client.AddNotificationTrigger(parameters, false);
        }
コード例 #17
0
        private void AddInvalidTrigger()
        {
            var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;

            var htmlFunction = client.GetType().Assembly.GetType("PrtgAPI.HtmlFunction");
            var editSettings = htmlFunction.GetField("EditSettings").GetValue(null);

            var requestEngine = client.GetType().GetField("requestEngine", bindingFlags).GetValue(client);

            var args = new[] { htmlFunction, typeof(Parameters.Parameters), typeof(Func <HttpResponseMessage, string>) };

            var method = requestEngine.GetType().GetMethod("ExecuteRequest", bindingFlags, null, args, null);

            var channel = client.GetChannels(Settings.ChannelSensor).First(c => c.Id == Settings.Channel);

            var param = new ThresholdTriggerParameters(Settings.UpSensor)
            {
                Channel = channel
            };

            method.Invoke(requestEngine, new[] { editSettings, param, null });
        }
コード例 #18
0
        public void Action_NotificationTrigger_CreateFromExistingTrigger_Threshold_Sensor()
        {
            //Create the initial trigger

            var channel = client.GetChannels(Settings.ChannelSensor).First();

            var parameters = new ThresholdTriggerParameters(Settings.ChannelSensor)
            {
                Channel = channel
            };

            //Verify it was created successfully

            client.AddNotificationTrigger(parameters);

            var triggers = client.GetNotificationTriggers(Settings.ChannelSensor).Where(t => t.Inherited == false).ToList();

            AssertEx.AreEqual(1, triggers.Count, "Initial trigger did not add successfully");
            AssertEx.IsTrue(triggers.First().Channel.ToString() == channel.Name, "Initial trigger channel did not serialize properly");

            //Clone the trigger

            var newParameters = new ThresholdTriggerParameters(Settings.ChannelSensor, triggers.First());

            client.AddNotificationTrigger(newParameters);

            //Verify it was created successfully

            var newTriggers = client.GetNotificationTriggers(Settings.ChannelSensor).Where(t => t.Inherited == false).ToList();

            AssertEx.AreEqual(2, newTriggers.Count, "Second trigger did not add successfully");

            foreach (var trigger in newTriggers)
            {
                AssertEx.IsTrue(trigger.Channel.ToString() == channel.Name, "Second trigger channel did not serialize properly");
            }
        }
コード例 #19
0
        public void ThresholdTriggerParameters_AllProperties_HaveDefault()
        {
            var parameters = new ThresholdTriggerParameters(1, 1);

            TriggerParameters_AllProperties_HaveDefault(parameters);
        }
コード例 #20
0
        public void Action_NotificationTrigger_AddWithoutCustomization_Threshold()
        {
            var parameters = new ThresholdTriggerParameters(Settings.Probe);

            AddRemoveTrigger(parameters, true);
        }