-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
57 lines (51 loc) · 2.15 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using InfluxDB.Client;
using System;
using System.Collections.Generic;
using System.CommandLine;
using System.CommandLine.Invocation;
using System.CommandLine.Parsing;
using System.Threading.Tasks;
namespace SimulatedSensor
{
public static class Program
{
public static string DeviceID;
public static string ServerBucket;
public static string ServerOrg;
public static int Main(string[] args)
{
var rootCommand = new RootCommand
{
new Option<string>("--id", "The ID of the simulated device") { Required = true },
new Option<SensorsContainer>("--sensors", "A sensor to emulate: Format of value is name1:min1:max1:interval1;name2:min2:max2:interval2. Name is a string, min/max are doubles and interval is an integer in ms. Sensors are separated by ';,' values are separated by ':'") { Required = true },
new Option<string>("--serverUrl", "The URL of the server") { Required = true },
new Option<string>("--serverToken", "The token for the server") { Required = true },
new Option<string>("--serverBucket", "The bucket on the server") { Required = true },
new Option<string>("--serverOrg", "The organisation on the server") { Required = true }
};
rootCommand.Handler = CommandHandler.Create<string, SensorsContainer, string, string, string, string>(RunSensorSimulation);
return rootCommand.Invoke(args);
}
public static void RunSensorSimulation(string id, SensorsContainer sensors, string serverUrl, string serverToken, string serverBucket, string serverOrg)
{
if (id == "env")
{
DeviceID = Environment.GetEnvironmentVariable("SIMDEV_POD_NAME");
}
else
{
DeviceID = id;
}
ServerBucket = serverBucket;
ServerOrg = serverOrg;
using var influxDBClient = InfluxDBClientFactory.Create(serverUrl, serverToken.ToCharArray());
influxDBClient.DisableGzip();
List<Task> tasks = new List<Task>();
foreach (var sensor in sensors.Sensors)
{
tasks.Add(Task.Run(() => DataGeneration.GenerateSensorData(sensor, influxDBClient)));
}
Task.WaitAll(tasks.ToArray());
}
}
}