1
1
{ ***************************************************************************
2
2
3
- Copyright (c) 2016-2019 Kike Pérez
3
+ Copyright (c) 2016-2020 Kike Pérez
4
4
5
5
Unit : Quick.Data.InfluxDB
6
6
Description : InfluxDB data provider
7
7
Author : Kike Pérez
8
8
Version : 1.0
9
9
Created : 05/04/2019
10
- Modified : 10 /04/2019
10
+ Modified : 21 /04/2020
11
11
12
12
This file is part of QuickLogger: https://github.com/exilon/QuickLogger
13
13
@@ -37,6 +37,7 @@ interface
37
37
Classes,
38
38
SysUtils,
39
39
DateUtils,
40
+ Quick.Collections,
40
41
Quick.HttpClient,
41
42
Quick.Commons,
42
43
Quick.Value ,
@@ -57,7 +58,7 @@ TInfluxDBData = class(TDataProvider)
57
58
fTags : TPairArray;
58
59
fCreateDataBaseIfNotExists : Boolean;
59
60
procedure CreateDataBase ;
60
- function GenerateWriteQuery (const aMeasurement : string; aTagPairs : TPairArray ; aFieldPairs : TFlexPairArray ; aTime : TDateTime): string;
61
+ function GenerateWriteQuery (const aMeasurement : string; aTagPairs : IList<TPair> ; aFieldPairs : IList<TFlexPair> ; aTime : TDateTime): string;
61
62
procedure SetWriteURL ;
62
63
procedure SetPassword (const Value : string);
63
64
procedure SetUserName (const Value : string);
@@ -74,8 +75,9 @@ TInfluxDBData = class(TDataProvider)
74
75
property Tags : TPairArray read fTags write fTags;
75
76
procedure Init ; override;
76
77
procedure Restart ; override;
77
- procedure Write (const aMeasurement : string; aFieldPairs : TFlexPairArray; aTime : TDateTime = 0 ); overload;
78
- procedure Write (const aMeasurement : string; aTagPairs : TPairArray; aFieldPairs : TFlexPairArray; aTime : TDateTime = 0 ); overload;
78
+ procedure Stop ; override;
79
+ procedure Write (const aMeasurement : string; aFieldPairs : IList<TFlexPair>; aTime : TDateTime = 0 ); overload;
80
+ procedure Write (const aMeasurement: string; aTagPairs : IList<TPair>; aFieldPairs: IList<TFlexPair>; aTime: TDateTime); overload;
79
81
procedure Write (const aMeasurement: string; const aFieldKey : string; aFieldValue : TFlexValue; aTime: TDateTime); overload;
80
82
end ;
81
83
@@ -97,15 +99,13 @@ constructor TInfluxDBData.Create;
97
99
98
100
destructor TInfluxDBData.Destroy;
99
101
begin
100
- if Assigned(fHTTPClient) then FreeAndNil(fHTTPClient);
101
-
102
+ if Assigned(fHTTPClient) then fHTTPClient.Free;
102
103
inherited ;
103
104
end ;
104
105
105
106
procedure TInfluxDBData.Init ;
106
107
begin
107
108
if fInitiated then Stop;
108
-
109
109
SetWriteURL;
110
110
fHTTPClient := TJsonHTTPClient.Create;
111
111
fHTTPClient.ContentType := ' application/json' ;
@@ -137,22 +137,28 @@ procedure TInfluxDBData.SetWriteURL;
137
137
else fFullURL := Format(' %s/write?db=%s&precision=ms' ,[fURL,fDataBase]);
138
138
end ;
139
139
140
+ procedure TInfluxDBData.Stop ;
141
+ begin
142
+ inherited ;
143
+ if Assigned(fHTTPClient) then FreeAndNil(fHTTPClient);
144
+ end ;
145
+
140
146
procedure TInfluxDBData.Write (const aMeasurement: string; const aFieldKey : string; aFieldValue : TFlexValue; aTime: TDateTime);
141
147
var
142
- fparray : TFlexPairArray ;
148
+ fields : IList<TFlexPair> ;
143
149
begin
144
- fparray .Add(aFieldKey,aFieldValue);
145
- if atime <> 0 then Write(GenerateWriteQuery(aMeasurement,nil ,fparray ,aTime))
146
- else Write(GenerateWriteQuery(aMeasurement,nil ,fparray ,Now()));
150
+ fields .Add(TFlexPair.Create( aFieldKey,aFieldValue) );
151
+ if atime <> 0 then Write(GenerateWriteQuery(aMeasurement,nil ,fields ,aTime))
152
+ else Write(GenerateWriteQuery(aMeasurement,nil ,fields ,Now()));
147
153
end ;
148
154
149
- procedure TInfluxDBData.Write (const aMeasurement: string; aTagPairs : TPairArray ; aFieldPairs: TFlexPairArray ; aTime: TDateTime);
155
+ procedure TInfluxDBData.Write (const aMeasurement: string; aTagPairs : IList<TPair> ; aFieldPairs: IList<TFlexPair> ; aTime: TDateTime);
150
156
begin
151
157
if atime <> 0 then Write(GenerateWriteQuery(aMeasurement,aTagPairs,aFieldPairs,aTime))
152
158
else Write(GenerateWriteQuery(aMeasurement,aTagPairs,aFieldPairs,Now()));
153
159
end ;
154
160
155
- procedure TInfluxDBData.Write (const aMeasurement: string; aFieldPairs: TFlexPairArray ; aTime: TDateTime);
161
+ procedure TInfluxDBData.Write (const aMeasurement: string; aFieldPairs: IList<TFlexPair> ; aTime: TDateTime);
156
162
begin
157
163
if atime <> 0 then Write(GenerateWriteQuery(aMeasurement,nil ,aFieldPairs,aTime))
158
164
else Write(GenerateWriteQuery(aMeasurement,nil ,aFieldPairs,Now()));
@@ -171,7 +177,6 @@ procedure TInfluxDBData.CreateDataBase;
171
177
var
172
178
resp : IHttpRequestResponse;
173
179
begin
174
- exit;
175
180
try
176
181
resp := fHTTPClient.Post(Format(' %s/query?q=CREATE DATABASE %s' ,[fURL,fDatabase]),' ' );
177
182
except
@@ -182,7 +187,7 @@ procedure TInfluxDBData.CreateDataBase;
182
187
raise EInfluxDBData.Create(Format(' [TInfluxDBData] : Response %d : %s trying to create database' ,[resp.StatusCode,resp.StatusText]));
183
188
end ;
184
189
185
- function TInfluxDBData.GenerateWriteQuery (const aMeasurement : string; aTagPairs : TPairArray ; aFieldPairs : TFlexPairArray ; aTime : TDateTime): string;
190
+ function TInfluxDBData.GenerateWriteQuery (const aMeasurement : string; aTagPairs : IList<TPair> ; aFieldPairs : IList<TFlexPair> ; aTime : TDateTime): string;
186
191
var
187
192
incinfo : TStringList;
188
193
tags : string;
@@ -228,6 +233,7 @@ procedure TInfluxDBData.Write(const aLine : string);
228
233
if not fInitiated then Init;
229
234
230
235
stream := TStringStream.Create(aLine);
236
+ var a := aline;
231
237
try
232
238
try
233
239
resp := fHTTPClient.Post(fFullURL,stream);
0 commit comments