Esempio n. 1
0
 protected string FillTelemetryTemplate(TelemetryTemplate telemetryTemplate)
 {
     return(telemetryTemplate?.Create(this.variableValues));
 }
Esempio n. 2
0
 public TemplatedPayload(int distribution, TelemetryTemplate template, TelemetryValues variables)
     : this(distribution, null, template, variables)
 {
 }
Esempio n. 3
0
 public TemplatedPayload(int distribution, string deviceId, TelemetryTemplate template, TelemetryValues variables)
     : base(distribution, deviceId)
 {
     this.Template  = template;
     this.Variables = variables;
 }
Esempio n. 4
0
        private static List <PayloadBase> LoadPayloads(IConfiguration configuration, RunnerConfiguration config, ILogger logger)
        {
            var payloads = new List <PayloadBase>();

            var isDefaultTemplateContent             = false;
            TelemetryTemplate defaultPayloadTemplate = null;
            var rawTelemetryTemplate = configuration.GetValue <string>(Constants.TemplateConfigName);

            if (!string.IsNullOrWhiteSpace(rawTelemetryTemplate))
            {
                defaultPayloadTemplate = new TelemetryTemplate(rawTelemetryTemplate);
            }
            else
            {
                defaultPayloadTemplate   = new TelemetryTemplate();
                isDefaultTemplateContent = true;
            }

            var rawDynamicPayload = configuration.GetValue <string>(Constants.PayloadDistributionConfigName);

            if (!string.IsNullOrEmpty(rawDynamicPayload))
            {
                var matches = templateParser.Matches(rawDynamicPayload);
                foreach (Match m in matches)
                {
                    if (m.Groups.TryGetValue("type", out var templateType) && m.Groups.TryGetValue("pv", out var paramValuesRaw))
                    {
                        var templateTypeLowercase = templateType.Value.ToLowerInvariant();

                        var paramValues = paramValuesRaw.Value.Split(",", StringSplitOptions.RemoveEmptyEntries);
                        if (paramValues.Length == 0)
                        {
                            logger.LogWarning("Expecting parameters in payload definition, found nothing template type '{value}'", templateTypeLowercase);
                            continue;
                        }

                        if (!int.TryParse(paramValues[0].Replace("%", string.Empty), out var distribution))
                        {
                            logger.LogWarning("Could not parse payload distribution from '{value}'", paramValues[0]);
                            continue;
                        }

                        switch (templateTypeLowercase)
                        {
                        case "fixsize":
                            if (paramValues.Length > 0 && int.TryParse(paramValues[1], out var fixSize) && fixSize >= 0)
                            {
                                payloads.Add(new FixPayload(distribution, new byte[fixSize]));
                            }

                            break;

                        case "fix":
                            if (paramValues.Length > 0 && !string.IsNullOrWhiteSpace(paramValues[1]))
                            {
                                var base64Text = paramValues[1].Trim();
                                try
                                {
                                    var bytes = Convert.FromBase64String(base64Text);
                                    payloads.Add(new FixPayload(distribution, bytes));
                                }
                                catch (Exception)
                                {
                                    logger.LogWarning("Could not parse base64 payload '{value}'", base64Text);
                                }
                            }

                            break;

                        case "template":
                            if (paramValues.Length == 1)
                            {
                                payloads.Add(new TemplatedPayload(distribution, defaultPayloadTemplate, config.Variables));
                            }
                            else
                            {
                                var templateName = paramValues[1].Trim();
                                if (templateName.Equals("default", StringComparison.OrdinalIgnoreCase))
                                {
                                    payloads.Add(new TemplatedPayload(distribution, defaultPayloadTemplate, config.Variables));
                                }
                                else
                                {
                                    var rawTemplateValue = configuration.GetValue <string>(templateName);
                                    if (string.IsNullOrWhiteSpace(rawTemplateValue))
                                    {
                                        logger.LogWarning("Could not find template with name '{name}'", templateName);
                                    }
                                    else
                                    {
                                        payloads.Add(new TemplatedPayload(distribution, new TelemetryTemplate(rawTemplateValue), config.Variables));
                                    }
                                }
                            }

                            break;

                        default:
                            logger.LogWarning("Unknown payload type '{type}'", templateTypeLowercase);
                            break;
                        }
                    }
                }
            }

            if (payloads.Count == 0)
            {
                payloads.Add(new TemplatedPayload(100, defaultPayloadTemplate, config.Variables));
                if (isDefaultTemplateContent)
                {
                    logger.LogWarning("Using default telemetry template");
                }
            }

            if (payloads.Select(x => x.Distribution).Sum() != 100)
            {
                logger.LogWarning("Payload percentage distribution is not equal 100");
            }

            return(payloads);
        }