public async Task SetTriggerProperty_ChannelAsync() { var triggerItem = NotificationTriggerItem.ThresholdTrigger(channel: "Backup State", parentId: "4000"); var channelItem = new ChannelItem(name: "Backup State"); var response = new NotificationTriggerResponse(new[] { triggerItem }, new[] { channelItem }); var client = Initialize_Client(response); var trigger = client.GetNotificationTriggers(4000).First(t => t.Type == TriggerType.Threshold); await ExecuteAsync( async c => { var channel = await c.GetChannelAsync(4000, 1); await c.SetTriggerPropertyAsync(trigger, TriggerProperty.Channel, channel); }, new[] { UnitRequest.Channels(4000), UnitRequest.ChannelProperties(4000, 1), UnitRequest.Sensors("filter_objid=4000"), UnitRequest.Channels(4000), UnitRequest.ChannelProperties(4000, 1), UnitRequest.EditSettings("id=4000&subid=7&channel_7=1") } ); }
private void StreamSerial(SensorParameters parameters, string[] address, bool requestCount = false, int?count = null) { var url = new List <string>(); if (requestCount) { url.Add(UnitRequest.SensorCount); } url.AddRange(address.Select(a => UnitRequest.Sensors(a, UrlFlag.Columns))); Dictionary <Content, int> countOverride = null; if (count != null) { countOverride = new Dictionary <Content, int>(); countOverride[Content.Sensors] = count.Value; } Execute( c => c.StreamSensors(parameters, true).ToList(), url.ToArray(), countOverride ); }
protected override IWebResponse GetResponse(string address, Content content) { switch (requestNum) { case 1: //Get a group Assert.AreEqual(UnitRequest.Groups("count=1", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem(objid: "2000"))); case 2: //Are there any other groups called "Windows Infrastructure"? Assert.AreEqual(UnitRequest.Groups("count=*&filter_name=Windows+Infrastructure", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem(objid: "2000"), new GroupItem(objid: "2050"))); case 3: //Get all devices under the group "Windows Infrastructure" that we're piping from Assert.AreEqual(UnitRequest.Devices("count=*&filter_parentid=2000", UrlFlag.Columns), address); return(new DeviceResponse(new DeviceItem(name: "Device1", objid: "3000"), new DeviceItem(name: "Device2", objid: "3001"))); case 4: //Get all sensors from the child devices Assert.AreEqual(UnitRequest.Sensors("count=*&filter_name=@sub(ping)&filter_parentid=3000&filter_parentid=3001", UrlFlag.Columns), address); return(new SensorResponse(new SensorItem(name: "Ping", objid: "4000"), new SensorItem(name: "Pong2", objid: "4001"))); case 5: //Get all child groups under "Windows Infrastructure Assert.AreEqual(UnitRequest.Groups("count=*&filter_parentid=2000", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem(name: "Child Group", objid: "2001", totalsens: "0"))); default: throw UnknownRequest(address); } }
private void Channel_SetValueLookup(object value, string url) { Execute( c => c.SetChannelProperty(1001, 1, ChannelProperty.ValueLookup, value), UnitRequest.EditSettings($"id=1001&valuelookup_1={url}") ); }
protected override IWebResponse GetResponse(string address, Content content) { switch (requestNum) { case 1: //Request 2 ping sensors. We instead return 2 "pong" logs Assert.AreEqual(UnitRequest.Logs("count=2&start=1&filter_name=ping", UrlFlag.Columns), address); return(new MessageResponse(new MessageItem("Ping"), new MessageItem("Pong2"))); case 2: //We're going to have to stream. Request how many objects exist Assert.AreEqual(UnitRequest.Logs("count=1&columns=objid,name&filter_name=ping", null), address); return(new MessageResponse(Enumerable.Range(0, 2).Select(i => new MessageItem()).ToArray())); case 3: //Request the 1 remaining log Assert.AreEqual(UnitRequest.Logs("count=1&start=3&filter_name=ping", UrlFlag.Columns), address); return(new MessageResponse( new MessageItem("Ping"), //Skipped by BaseResponse new MessageItem("Pong2 Again") //Skipped by BaseResponse ) { Stream = true }); default: throw UnknownRequest(address); } }
protected override IWebResponse GetResponse(string address) { switch (requestNum) { case 1: Assert.AreEqual(address, UnitRequest.Objects("filter_objid=1001")); return(new ProbeResponse(new ProbeItem(objid: "1001", name: "Local Probe"))); case 2: Assert.AreEqual(address, UnitRequest.Probes("filter_objid=1001&filter_parentid=0")); return(new ProbeResponse(new ProbeItem(objid: "1001", name: "Local Probe"))); //Probe -> Devices case 3: Assert.AreEqual(address, UnitRequest.Devices("filter_parentid=1001")); return(new DeviceResponse( new DeviceItem(objid: "3001", name: "dc-1", position: "10", positionRaw: "10"), new DeviceItem(objid: "3002", name: "dc-2", position: "20", positionRaw: "20") )); //Probe -> Groups case 4: Assert.AreEqual(address, UnitRequest.Groups("filter_parentid=1001")); return(new GroupResponse(new GroupItem(objid: "2001", name: "Servers", position: "30", positionRaw: "30"))); //Probe -> Triggers case 5: Assert.AreEqual(address, UnitRequest.Triggers(1001)); return(new NotificationTriggerResponse( NotificationTriggerItem.StateTrigger(onNotificationAction: "300|Trigger1", parentId: "1001"), NotificationTriggerItem.StateTrigger(onNotificationAction: "301|Trigger2", parentId: "1001"), NotificationTriggerItem.StateTrigger(onNotificationAction: "302|Trigger3", parentId: "1001") )); //Probe -> Devices -> Sensors case 6: Assert.AreEqual(address, UnitRequest.Sensors("filter_parentid=3001")); return(new SensorResponse( new SensorItem(name: "Sensor2", objid: "4002", position: "20", positionRaw: "20"), new SensorItem(name: "Sensor1", objid: "4001", position: "10", positionRaw: "10") )); case 7: Assert.AreEqual(address, UnitRequest.Sensors("filter_parentid=3002")); return(new SensorResponse()); //Probe -> Groups -> Devices case 8: Assert.AreEqual(address, UnitRequest.Devices("filter_parentid=2001")); return(new DeviceResponse()); //Probe -> Groups -> Groups case 9: Assert.AreEqual(address, UnitRequest.Groups("filter_parentid=2001")); return(new GroupResponse()); default: throw UnknownRequest(address); } }
private Tuple <PrtgClient, AddressValidatorResponse> GetAddExcessiveSensorClient(List <WmiServiceTarget> services, RequestVersion version) { var formats = services.Select(s => "service__check=" + WebUtility.UrlEncode(((ISerializable)s).GetSerializedFormat())).ToList(); var urls = new List <string>(); //We don't request status since we already injected our version urls.Add(UnitRequest.BeginAddSensorQuery(1001, "wmiservice")); for (int i = 0; i < formats.Count; i += 30) { var thisRequest = formats.Skip(i).Take(30); var str = string.Join("&", thisRequest); var auth = version == RequestVersion.v18_1 ? "tmpid=2" : "username=username&passhash=12345678"; var url = $"https://prtg.example.com/addsensor5.htm?name_=Service&priority_=3&inherittriggers_=1&intervalgroup=1&interval_=60%7C60+seconds&errorintervalsdown_=1&tags_=wmiservicesensor+servicesensor&restart_=0&monitorchange_=1&monitorextended_=0&service_=1&sensortype=wmiservice&{str}&id=1001&{auth}"; urls.Add(url); if (i == 0 && version == RequestVersion.v18_1) { urls.Add(UnitRequest.AddSensorProgress(1001, 2, true)); } } #pragma warning disable 618 var response = new AddressValidatorResponse(urls.ToArray(), true); var client = Initialize_Client(response, version); #pragma warning restore 618 return(Tuple.Create(client, response)); }
public void Tree_Lazy_Child_ResolvesOnlyOnce() { var client = BaseTest.Initialize_Client(new TreeRequestResponse(TreeRequestScenario.MultiLevelContainer)); var validator = new EventValidator(client, new[] { //Get Object UnitRequest.Objects("filter_objid=1001"), //Get Probe UnitRequest.Probes("filter_objid=1001&filter_parentid=0"), //Probe -> Devices/Groups UnitRequest.Devices("filter_parentid=1001"), UnitRequest.Groups("filter_parentid=1001"), //Probe -> Device -> Sensors UnitRequest.Sensors("filter_parentid=3001") }); validator.MoveNext(2); var tree = client.GetTreeLazy(1001); validator.MoveNext(2); var child = tree.Children[0]; var childAgain = tree.Children[0]; validator.MoveNext(); var grandChild = child.Children[0]; var grandChildAgain = child.Children[0]; }
public void Query_Select_AnonymousLiteral_ToWhere() { Execute(q => q.Select(s => new { First = 3 }).Where(f => f.First == 3), $"content=sensors&columns={UnitRequest.DefaultSensorProperties()}&count=500", s => Assert.IsTrue(s.All(e => e.First == 3))); }
public void Log_Watch_SpecifiesAStartDate() { Execute( c => c.WatchLogs(startDate: new DateTime(2000, 10, 2, 12, 10, 5, DateTimeKind.Utc)).Take(1).ToList(), UnitRequest.Logs("start=1&filter_dstart=2000-10-02-12-10-05") ); }
protected override IWebResponse GetResponse(string address, Content content) { switch (requestNum) { case 1: //Get a group Assert.AreEqual(UnitRequest.Groups("count=1", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem())); case 2: //Are there any other groups called "Windows Infrastructure"? Assert.AreEqual(UnitRequest.Groups("count=*&filter_name=Windows+Infrastructure", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem())); case 3: //Get all sensors under the group "Windows Infrastructure" Assert.AreEqual(UnitRequest.Sensors("count=*&filter_name=@sub(ping)&filter_group=Windows+Infrastructure", UrlFlag.Columns), address); return(new SensorResponse(new SensorItem(name: "First"), new SensorItem(name: "Ping"))); case 4: //Get the child groups of "Windows Infrastructure" Assert.AreEqual(UnitRequest.Groups("count=*&filter_parentid=2211", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem(name: "Child Group"))); case 5: //Are there any other groups called "Child Group"? Assert.AreEqual(UnitRequest.Groups("count=*&filter_name=Child+Group", UrlFlag.Columns), address); return(new GroupResponse(new GroupItem(name: "Child Group"))); case 6: //Get all sensors under the group "Child Group" Assert.AreEqual(UnitRequest.Sensors("count=*&filter_name=@sub(ping)&filter_group=Child+Group", UrlFlag.Columns), address); return(new SensorResponse(new SensorItem(name: "Second"), new SensorItem(name: "Ping"), new SensorItem(name: "Ping"))); default: throw UnknownRequest(address); } }
protected override IWebResponse GetResponse(string address) { switch (requestNum) { case 1: Assert.AreEqual(UnitRequest.Groups("count=1", UrlFlag.Columns), address); return(new BasicResponse(standardResponse.GetResponseText(ref address))); case 2: Assert.AreEqual(UnitRequest.Groups("filter_objid=9999"), address); return(new GroupResponse(new GroupItem(objid: "2000", groupnum: "0", groupnumRaw: "0", devicenum: "1", devicenumRaw: "1"))); //Tree case 3: Assert.AreEqual(UnitRequest.Devices("filter_parentid=2000"), address); return(new DeviceResponse(new DeviceItem(objid: "3001"), new DeviceItem(objid: "3002"))); case 4: Assert.AreEqual(UnitRequest.Sensors("filter_parentid=3001"), address); return(new SensorResponse(new SensorItem(objid: "4001"))); case 5: Assert.AreEqual(UnitRequest.Sensors("filter_parentid=3002"), address); return(new SensorResponse(new SensorItem(objid: "4002"))); default: throw UnknownRequest(address); } }
protected void ExecuteUnsupportedNow <TResult>( Func <IQueryable <Sensor>, TResult> illegalAction, string message, Func <IQueryable <Sensor>, TResult> legalAction, string legalUrl, Action <TResult> legalValidator ) { AssertEx.Throws <NotSupportedException>( () => ExecuteClient(c => illegalAction(c.QuerySensors(true)), new string[] { }, null), message ); var flags = UnitRequest.DefaultObjectFlags & ~UrlFlag.Count; if (!legalUrl.Contains("count")) { legalUrl = "count=500" + (string.IsNullOrEmpty(legalUrl) ? legalUrl : $"&{legalUrl}"); } var urls = new[] { UnitRequest.Sensors(legalUrl, flags) }; ExecuteClient(c => legalAction(c.QuerySensors(true)), urls, legalValidator); }
protected void ExecuteUnsupportedInternal <TSource, TResult>( Func <PrtgClient, IQueryable <TSource> > query, Func <IQueryable <TSource>, IQueryable <TResult> > illegalAction, string message, Func <IQueryable <TSource>, IEnumerable <TResult> > legalAction, string legalUrl, Action <List <TResult> > legalValidator ) { AssertEx.Throws <NotSupportedException>( () => ExecuteClient(c => illegalAction(query(c)), new string[] { }, s => s.ToList()), message ); var flags = UnitRequest.DefaultObjectFlags & ~UrlFlag.Count; if (!legalUrl.Contains("count")) { legalUrl = "count=500" + (string.IsNullOrEmpty(legalUrl) ? legalUrl : $"&{legalUrl}"); } var urls = new[] { typeof(TSource) == typeof(Log) ? UnitRequest.Logs(legalUrl, flags) : UnitRequest.Sensors(legalUrl, flags) }; ExecuteClient(c => legalAction(query(c)), urls, s => legalValidator(s.ToList())); }
private async Task AddSensorAsync(RequestVersion version) { var builder = new StringBuilder(); builder.Append("https://prtg.example.com/addsensor5.htm?name_=XML+Custom+EXE%2FScript+Sensor&priority_=3&inherittriggers_=1&intervalgroup=1&interval_=60%7C60+seconds"); builder.Append("&errorintervalsdown_=1&tags_=xmlexesensor&exefile_=test.ps1%7Ctest.ps1%7C%7C&exeparams_=&environment_=0"); builder.Append("&usewindowsauthentication_=0&mutexname_=&timeout_=60&writeresult_=0&sensortype=exexml&id=1001&"); var auth = version == RequestVersion.v18_1 ? "tmpid=2" : "username=username&passhash=12345678"; builder.Append(auth); var urls = new List <string> { ////We don't request status since we already injected our version UnitRequest.BeginAddSensorQuery(1001, "exexml"), builder.ToString() }; if (version == RequestVersion.v18_1) { urls.Add(UnitRequest.AddSensorProgress(1001, 2, true)); } var parameters = new ExeXmlSensorParameters("test.ps1"); await ExecuteAsync( async c => await c.AddSensorAsync(1001, parameters, false), urls.ToArray(), version : version ); }
public void NotificationTrigger_LoadsAction_Lazy() { var client = Initialize_Client(new NotificationTriggerResponse(NotificationTriggerItem.StateTrigger(offNotificationAction: "302|Email to all members of group PRTG Administrator"))); var validator = new EventValidator <string>(new[] { //First - get all triggers UnitRequest.Triggers(1001), //Second - touch a trigger's action's unsupported property UnitRequest.Notifications("filter_objid=301&filter_objid=302"), UnitRequest.NotificationProperties(301), //Third - touch an unsupported property of another action UnitRequest.NotificationProperties(302) }); client.LogVerbose += (s, e) => { var message = Regex.Replace(e.Message, "(.+ request )(.+)", "$2"); Assert.AreEqual(validator.Get(message), message); }; validator.MoveNext(); var triggers = client.GetNotificationTriggers(1001); validator.MoveNext(2); var val = triggers.First().OnNotificationAction.Postpone; validator.MoveNext(); var val2 = triggers.First().OffNotificationAction.Postpone; Assert.IsTrue(validator.Finished, "Did not process all requests"); }
private Tuple <PrtgClient, AddressValidatorResponse> GetUntilMatchedClient(int pageSize = 500) { var items = new List <BaseItem>(); items.AddRange(GetPage("Yes", pageSize)); items.AddRange(GetPage("YeNo", pageSize)); items.AddRange(GetPage("YeNo", pageSize)); items.AddRange(GetPage("Yes", pageSize)); items.AddRange(GetPage("YeNo", pageSize)); items.AddRange(GetPage("Yes", pageSize)); var urls = new object[] { UnitRequest.Sensors($"count={pageSize}&filter_name=@sub(Ye)", UrlFlag.Columns), //Yes UnitRequest.Sensors($"count={pageSize}&filter_name=@sub(Ye)&start={pageSize * 1}", UrlFlag.Columns), //YeNo UnitRequest.Sensors($"count={pageSize}&filter_name=@sub(Ye)&start={pageSize * 2}", UrlFlag.Columns), //YeNo UnitRequest.Sensors($"count={pageSize}&filter_name=@sub(Ye)&start={pageSize * 3}", UrlFlag.Columns) //Yes }; #pragma warning disable 618 var response = new AddressValidatorResponse(urls) { ItemOverride = new Dictionary <Content, BaseItem[]> { [Content.Sensors] = items.ToArray() } }; #pragma warning restore 618 var client = Initialize_Client(response); return(Tuple.Create(client, response)); }
//One stream private void QueryLog( System.Linq.Expressions.Expression <Func <Log, bool> > predicate, Func <PrtgClient, IEnumerable <Log> > stream, string[] url, Enum[] streamOrder = null) { var urls = url.SelectMany(s => { if (!s.Contains("count")) { s = $"count=500&{s}"; } return(new[] { UnitRequest.Logs(s, UrlFlag.Columns) }); }).ToArray(); ExecuteClient(c => c.QueryLogs(predicate), urls, s => s.ToList()); if (streamOrder != null) { urls = GetStreamLogUrls(urls, streamOrder); } ExecuteClient(stream, urls, s => s.ToList()); }
public IActionResult CreateUpdate(UnitRequest request) { bool response = false; if (request.Id > 0) { response = _proxy.UpdateUnit(request.Id, request); if (response) { return(Redirect("/unit/list")); } } else { response = _proxy.CreateUnit(request); if (response) { return(Redirect("/unit/list")); } } ViewBag.Message = (!response) ? "Bad Request" : string.Empty; return(View(request)); }
private void QueryGroup(System.Linq.Expressions.Expression <Func <Group, bool> > predicate, string url) { ExecuteClient(c => c.QueryGroups(predicate), new[] { UnitRequest.Groups($"count=500" + (string.IsNullOrEmpty(url) ? url : $"&{url}"), UrlFlag.Columns) }, s => s.ToList()); }
private void QueryProbe(System.Linq.Expressions.Expression <Func <Probe, bool> > predicate, string url) { ExecuteClient(c => c.QueryProbes(predicate), new[] { UnitRequest.Probes($"count=500" + (string.IsNullOrEmpty(url) ? url : $"&{url}") + "&filter_parentid=0", UrlFlag.Columns) }, s => s.ToList()); }
public void Query_Where_Sensors_MatchAnyDevices() { var urls = new List <string> { UnitRequest.Sensors("count=500", UrlFlag.Columns) }; var filters = new[] { "filter_objid=3000", "filter_objid=3001", "filter_objid=3002" }; urls.AddRange(filters.SelectMany(f => new[] { UnitRequest.Devices($"count=500&{f}", UrlFlag.Columns) } )); var client = GetClient(urls.ToArray()); var sensors = client.Item1.QuerySensors().Where(s => client.Item1.QueryDevices().Any(d => d.Id == s.Id - 1000)).ToList(); Assert.AreEqual(3, sensors.Count); client.Item2.AssertFinished(); }
public void QueryFilter_LogProperties_DateTime_BackwardsAndForwards() { var url = new[] { UnitRequest.Logs($"count=500&start=1&filter_dend={Time.TodayStr}", UrlFlag.Columns) }; ExecuteClient(c => c.QueryLogs().Where(l => l.DateTime < Time.Today), url, l => l.ToList()); ExecuteClient(c => c.QueryLogs().Where(l => Time.Today > l.DateTime), url, l => l.ToList()); }
public void Query_Where_Intermediate_NewSensor_Select_FromSource() { ExecuteClient(c => c.QuerySensors().Where(s => new Sensor { Message = s.Name }.Message == "test").Select(s => s.Name), new[] { UnitRequest.Sensors("columns=name&count=500&filter_name=test", null) }, s => s.ToList()); }
public void Query_Where_Intermediate_NewSensor_ToWhere() { ExecuteClient(c => c.QuerySensors().Where(s => new Sensor { Message = s.Name }.Message == "test").Where(s => s.Id == 4000), new[] { UnitRequest.Sensors("count=500&filter_name=test&filter_objid=4000", UrlFlag.Columns) }, s => s.ToList()); }
public void Query_Where_Operators_Fake_EndsWith_Take() { ExecuteClient( c => c.QuerySensors(s => s.Name.EndsWith("0")).Take(2), new[] { UnitRequest.Sensors("count=500&filter_name=@sub(0)", UrlFlag.Columns) }, s => Assert.AreEqual(1, s.Count()) ); }
public void Query_Where_SplitRequests_OmitsId_WithSingleRequest() { ExecuteClient( c => c.QuerySensors(s => s.Name == "Ping").Select(s => s.Name), new[] { UnitRequest.Sensors("columns=name&count=500&filter_name=Ping", null) }, s => s.ToList() ); }
public void Query_Where_SplitRequests_Logs_Select_MultipleSets_AllParameters() { ExecuteClient( c => c.QueryLogs().Where(l => l.Id == 1001 || l.Id == 1002).Select(l => l.Name), new[] { UnitRequest.Logs("count=500&start=1&id=1001", UrlFlag.Columns), UnitRequest.Logs("count=500&start=1&id=1002", UrlFlag.Columns) }, l => l.ToList() ); }
public void Query_Where_SplitRequests_Logs_Select_SingleSet_ReduceParameters() { ExecuteClient( c => c.QueryLogs().Where(l => l.Id == 1001).Select(l => l.Name), new[] { UnitRequest.Logs("columns=objid,name&count=500&start=1&id=1001", null) }, l => l.ToList() ); }
public void Query_Where_AsEnumerable_EnumerableMethod_AsQueryable() { ExecuteClient( c => c.QuerySensors().Where(s => s.Id == 4000).AsEnumerable().Where(s => s.Name == "Volume IO _Total0").AsQueryable(), new[] { UnitRequest.Sensors("count=500&filter_objid=4000", UrlFlag.Columns) }, s => Assert.AreEqual(1, s.Count()) ); }