internal static SensorMultiQueryTargetParameters GetQueryTargetParameters(PrtgClient client, int deviceId, string sensorType, SensorQueryTarget queryTarget, Hashtable queryParametersRaw) { queryTarget = GetQueryTarget(client, deviceId, sensorType, queryTarget); var queryParameters = GetQueryParameters(queryParametersRaw); if (queryTarget != null || queryParameters != null) { return(new SensorMultiQueryTargetParameters(queryTarget, queryParameters)); } return(null); }
private static SensorQueryTarget GetQueryTarget(PrtgClient client, int deviceId, string sensorType, SensorQueryTarget queryTarget) { if (queryTarget != null && queryTarget.Value.Contains("*")) { var allTypes = client.GetSensorTypes(deviceId); var desiredType = allTypes.FirstOrDefault(t => string.Equals(t.Id, sensorType, StringComparison.OrdinalIgnoreCase)); if (desiredType != null) { if (desiredType.QueryTargets == null) { return(queryTarget); //Type does not support query targets; leave it to internal engine to throw exception } var wildcard = new WildcardPattern(queryTarget.Value, WildcardOptions.IgnoreCase); var candidates = desiredType.QueryTargets.Where(a => wildcard.IsMatch(a.Value)).ToList(); if (candidates.Count == 1) { return(candidates.Single()); } else if (candidates.Count > 1) { throw new InvalidOperationException($"Query target wildcard '{queryTarget}' is ambiguous between the following parameters: {candidates.ToQuotedList()}. Please specify a more specific identifier."); } else { throw new InvalidOperationException($"Could not find a query target matching the wildcard expression '{queryTarget}'. Please specify one of the following parameters: {desiredType.QueryTargets.ToQuotedList()}."); } } } return(queryTarget); }
/// <summary> /// Initializes a new instance of the <see cref="SensorMultiQueryTargetParameters"/> class. /// </summary> /// <param name="queryTarget">The query target to utilize.</param> /// <param name="parameters">The query target parameters to utilize.</param> public SensorMultiQueryTargetParameters(SensorQueryTarget queryTarget, SensorQueryTargetParameters parameters) { QueryTarget = queryTarget; Parameters = parameters; }