public static string InfluxCon(LineProtocolConnectionParameters conobj, string query) { var client = new WebClient(); var queryString = Uri.EscapeUriString("db=" + Uri.EscapeDataString(conobj.DBName) + "&q=" + query);//SELECT * FROM \"weather\""); var queryUrl = conobj.Address + "query?" + queryString; return(client.DownloadString(queryUrl)); }
/// <summary> /// InfluxClient Constructor. The constructor expects LineProtocolConnectionParameters in params. It does initialization of HTTP Client and HTTP Client Handler. /// It also does initialization of worker buffer and failure handler buffer. /// </summary> /// <param name="paramsObj">The reference of Line Protocol Connection parameters.</param> /// <returns>returns instance of InfluxClient</returns> public InfluxClient(LineProtocolConnectionParameters paramsObj) { //1. populate necessary fields for Influx Connection //create HTTP Client for connection to Influx _httpClientHandler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }; _httpClient = new HttpClient(_httpClientHandler) { BaseAddress = paramsObj.Address }; //Create Influx POST request URL _requestUri = $"write?db={Uri.EscapeDataString(paramsObj.DBName)}"; if (!string.IsNullOrEmpty(paramsObj.User)) { _requestUri += $"&u={Uri.EscapeDataString(paramsObj.User)}&p={Uri.EscapeDataString(paramsObj.Password)}"; } //2. populate necessary fields for buffer ( Using reactive Programming Rx ) //Create Subject for first buffer (worker buffer) Subject <string> subject = new Subject <string>(); _synSubject = Subject.Synchronize(subject); //Create first buffer ( worker buffer) with provided buffer flush time or buffer item limit for flush _subscription = _synSubject .Buffer(TimeSpan.FromSeconds(paramsObj.FlushBufferSeconds), paramsObj.FlushBufferItemsSize) .Subscribe(onNext: async(pointsList) => await SendToInflux(pointsList, true)); //Second buffer in case first fails. If requests fail in first buffer it will queue in 2nd buffer //Create Subject for second buffer (failure handler buffer) Subject <string> subjectSecondQueue = new Subject <string>(); _synSubjectSecondQueue = Subject.Synchronize(subjectSecondQueue); //Create second buffer ( failure handler buffer) with provided buffer flush time or buffer item limit for flush _subscriptionSecondQueue = _synSubjectSecondQueue .Buffer(TimeSpan.FromSeconds(paramsObj.FlushSecondBufferSeconds), paramsObj.FlushSecondBufferItemsSize) .Subscribe(onNext: async(pointsListSecondQueue) => await SendToInflux(pointsListSecondQueue, false)); }
public static LineProtocolConnectionParameters InitConfiguration() { var confFileobj = new LineProtocolConnectionParameters { Address = new Uri("http://influxdb:8086"), DBName = "telemetry", User = "", Password = "", FlushBufferItemsSize = 2, FlushBufferSeconds = 2, FlushSecondBufferItemsSize = 2, FlushSecondBufferSeconds = 3, UseGzipCompression = true }; return(confFileobj); }