public async Task <string> sendData(InfluxTelemetry inobj)// RSACryptoServiceProvider RSAalg) { //InfluxTelemetry inobj = generateRandomData(RSAalg); var json = JsonConvert.SerializeObject(inobj); var response = await Request(HttpMethod.Post, json, _client); string ress = response.StatusCode.ToString(); //string responseText = await response.Content.ReadAsStringAsync(); //Console.WriteLine(ress); return(ress); }
public ActionResult PostInfluxTelemetry([FromBody] InfluxTelemetry telemetryPackage) { // verify in coming data if (telemetryPackage?.NodeId == null || string.IsNullOrWhiteSpace(telemetryPackage.Signature) || telemetryPackage.Payload == null || telemetryPackage.Payload.Count == 0) { Console.WriteLine("bad request"); return(BadRequest()); } // Get Node key from keystore string nodeKey; try { nodeKey = _keyStore.GetKeyForNode(telemetryPackage.NodeId); } catch (KeyNotFoundException) { Console.WriteLine($"Node Unknown: {telemetryPackage.NodeId}"); return(StatusCode(403)); } // Verify Signature string signedPayload = string.Join("", telemetryPackage.Payload); bool signatureValid = SignatureVerifier.IsSignatureValid(signedPayload, telemetryPackage.Signature, nodeKey); if (!signatureValid) { Console.WriteLine($"Bad signature from node: {telemetryPackage.NodeId}"); return(StatusCode(403)); } Console.WriteLine($"Accepted telemetry from {telemetryPackage.NodeId} [{telemetryPackage.Payload.Count} metrics]"); // Signature valid - record to db if (_influx.Enqueue(telemetryPackage.Payload, true)) { return(Accepted()); } else { return(StatusCode(400)); } }
static void Main(string[] args) { RSACryptoManager cMgr = new RSACryptoManager("cspblob.bin"); HttpRequestsManager hMgr = new HttpRequestsManager("http://localhost:5000/api/ingress/influx/", true); ConcurrentDictionary <string, int> results = new ConcurrentDictionary <string, int>(); Stopwatch timer2 = new Stopwatch(); timer2.Start(); int legitTraffic = 500; int sigFailTraffic = 200; int invalidPayloadTraffic = 200; //var tasks = Enumerable.Range(0, taskCount).Select(p => SendDataToIngress2(cMgr, hMgr, results)); //Task.WhenAll(tasks).Wait(); for (int i = 1; i <= legitTraffic; i++) { InfluxTelemetry inobj = generateRandomData(cMgr, true, true); Task <string> task = Task.Run <string>(async() => await SendDataToIngress2(hMgr, inobj)); recordTestResults(task, results); } for (int i = 1; i <= sigFailTraffic; i++) { InfluxTelemetry inobj = generateRandomData(cMgr, true, false); Task <string> task = Task.Run <string>(async() => await SendDataToIngress2(hMgr, inobj)); recordTestResults(task, results); } for (int i = 1; i <= invalidPayloadTraffic; i++) { InfluxTelemetry inobj = generateRandomData(cMgr, false, false); Task <string> task = Task.Run <string>(async() => await SendDataToIngress2(hMgr, inobj)); recordTestResults(task, results); } timer2.Stop(); TimeSpan timeTaken2 = timer2.Elapsed; Console.WriteLine(timeTaken2.ToString()); printTestResults(results); }
static async Task <string> SendDataToIngress2(HttpRequestsManager hm, InfluxTelemetry inobj) { string statusCode = await hm.sendData(inobj); return(await hm.sendData(inobj)); }