示例#1
0
        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);
        }
示例#2
0
        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;
 }