Пример #1
0
        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);
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        static async Task <string> SendDataToIngress2(HttpRequestsManager hm, InfluxTelemetry inobj)
        {
            string statusCode = await hm.sendData(inobj);

            return(await hm.sendData(inobj));
        }