protected string FillTelemetryTemplate(TelemetryTemplate telemetryTemplate) { return(telemetryTemplate?.Create(this.variableValues)); }
public TemplatedPayload(int distribution, TelemetryTemplate template, TelemetryValues variables) : this(distribution, null, template, variables) { }
public TemplatedPayload(int distribution, string deviceId, TelemetryTemplate template, TelemetryValues variables) : base(distribution, deviceId) { this.Template = template; this.Variables = variables; }
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); }