Skip to content
This repository was archived by the owner on Jul 18, 2023. It is now read-only.

Commit fe041d7

Browse files
committed
remove duplicate code into base class
remove unused code
1 parent adf53b6 commit fe041d7

File tree

4 files changed

+97
-71
lines changed

4 files changed

+97
-71
lines changed

src/InfluxDB.LineProtocol/Client/LineProtocolClient.cs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@
1010

1111
namespace InfluxDB.LineProtocol.Client
1212
{
13-
public class LineProtocolClient : ILineProtocolClient
13+
public class LineProtocolClient : LineProtocolClientBase
1414
{
1515
private readonly HttpClient _httpClient;
16-
private readonly string _database, _username, _password;
1716

1817
public LineProtocolClient(Uri serverBaseAddress, string database, string username = null, string password = null)
1918
: this(new HttpClientHandler(), serverBaseAddress, database, username, password)
2019
{
2120
}
2221

23-
protected LineProtocolClient(HttpMessageHandler handler, Uri serverBaseAddress, string database, string username, string password)
22+
protected LineProtocolClient(
23+
HttpMessageHandler handler,
24+
Uri serverBaseAddress,
25+
string database,
26+
string username,
27+
string password)
28+
:base(serverBaseAddress, database, username, password)
2429
{
2530
if (serverBaseAddress == null)
2631
throw new ArgumentNullException(nameof(serverBaseAddress));
@@ -29,26 +34,12 @@ protected LineProtocolClient(HttpMessageHandler handler, Uri serverBaseAddress,
2934

3035
// Overload that allows injecting handler is protected to avoid HttpMessageHandler being part of our public api which would force clients to reference System.Net.Http when using the lib.
3136
_httpClient = new HttpClient(handler) { BaseAddress = serverBaseAddress };
32-
_database = database;
33-
_username = username;
34-
_password = password;
3537
}
3638

37-
public Task<LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
38-
{
39-
var stringWriter = new StringWriter();
40-
41-
payload.Format(stringWriter);
42-
43-
return SendAsync(stringWriter.ToString(), Precision.Nanoseconds, cancellationToken);
44-
}
45-
46-
public Task<LineProtocolWriteResult> SendAsync(LineProtocolWriter lineProtocolWriter, CancellationToken cancellationToken = default(CancellationToken))
47-
{
48-
return SendAsync(lineProtocolWriter.ToString(), lineProtocolWriter.Precision, cancellationToken);
49-
}
50-
51-
private async Task<LineProtocolWriteResult> SendAsync(string payload, Precision precision, CancellationToken cancellationToken = default(CancellationToken))
39+
protected override async Task<LineProtocolWriteResult> OnSendAsync(
40+
string payload,
41+
Precision precision,
42+
CancellationToken cancellationToken = default(CancellationToken))
5243
{
5344
var endpoint = $"write?db={Uri.EscapeDataString(_database)}";
5445
if (!string.IsNullOrEmpty(_username))
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using InfluxDB.LineProtocol.Payload;
2+
using System;
3+
using System.IO;
4+
using System.Net;
5+
using System.Net.Http;
6+
using System.Net.Sockets;
7+
using System.Text;
8+
using System.Threading;
9+
using System.Threading.Tasks;
10+
11+
namespace InfluxDB.LineProtocol.Client
12+
{
13+
public abstract class LineProtocolClientBase : ILineProtocolClient
14+
{
15+
protected readonly string _database, _username, _password;
16+
17+
protected LineProtocolClientBase(Uri serverBaseAddress, string database, string username, string password)
18+
{
19+
if (serverBaseAddress == null)
20+
throw new ArgumentNullException(nameof(serverBaseAddress));
21+
if (string.IsNullOrEmpty(database))
22+
throw new ArgumentException("A database must be specified");
23+
24+
// Overload that allows injecting handler is protected to avoid HttpMessageHandler being part of our public api which would force clients to reference System.Net.Http when using the lib.
25+
_database = database;
26+
_username = username;
27+
_password = password;
28+
}
29+
30+
public Task<LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
31+
{
32+
var stringWriter = new StringWriter();
33+
34+
payload.Format(stringWriter);
35+
36+
return OnSendAsync(stringWriter.ToString(), Precision.Nanoseconds, cancellationToken);
37+
}
38+
39+
public Task<LineProtocolWriteResult> SendAsync(LineProtocolWriter lineProtocolWriter, CancellationToken cancellationToken = default(CancellationToken))
40+
{
41+
return OnSendAsync(lineProtocolWriter.ToString(), lineProtocolWriter.Precision, cancellationToken);
42+
}
43+
44+
protected abstract Task<LineProtocolWriteResult> OnSendAsync(
45+
string payload,
46+
Precision precision,
47+
CancellationToken cancellationToken = default(CancellationToken));
48+
}
49+
}

src/InfluxDB.LineProtocol/Client/LineProtocolUdpClient.cs

Lines changed: 10 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010

1111
namespace InfluxDB.LineProtocol.Client
1212
{
13-
public class LineProtocolUdpClient : ILineProtocolClient
13+
public class LineProtocolUdpClient : LineProtocolClientBase
1414
{
1515
private readonly UdpClient _udpClient;
1616
private readonly string _udpHostName;
1717
private readonly int _udpPort;
18-
private readonly string _database, _username, _password;
1918

2019
public LineProtocolUdpClient(
21-
Uri serverBaseAddress,
22-
string database,
23-
string username = null,
24-
string password = null)
20+
Uri serverBaseAddress,
21+
string database,
22+
string username = null,
23+
string password = null)
24+
:base(serverBaseAddress, database, username, password)
2525
{
2626
if (serverBaseAddress == null)
2727
throw new ArgumentNullException(nameof(serverBaseAddress));
@@ -31,52 +31,13 @@ public LineProtocolUdpClient(
3131
_udpHostName = serverBaseAddress.Host;
3232
_udpPort = serverBaseAddress.Port;
3333
_udpClient = new UdpClient();
34-
_database = database;
35-
_username = username;
36-
_password = password;
3734
}
3835

39-
public Task<LineProtocolWriteResult> WriteAsync(LineProtocolPayload payload, CancellationToken cancellationToken = default(CancellationToken))
36+
protected override async Task<LineProtocolWriteResult> OnSendAsync(
37+
string payload,
38+
Precision precision,
39+
CancellationToken cancellationToken = default(CancellationToken))
4040
{
41-
var stringWriter = new StringWriter();
42-
43-
payload.Format(stringWriter);
44-
45-
return SendAsync(stringWriter.ToString(), Precision.Nanoseconds, cancellationToken);
46-
}
47-
48-
public Task<LineProtocolWriteResult> SendAsync(LineProtocolWriter lineProtocolWriter, CancellationToken cancellationToken = default(CancellationToken))
49-
{
50-
return SendAsync(lineProtocolWriter.ToString(), lineProtocolWriter.Precision, cancellationToken);
51-
}
52-
53-
private async Task<LineProtocolWriteResult> SendAsync(string payload, Precision precision, CancellationToken cancellationToken = default(CancellationToken))
54-
{
55-
var endpoint = $"write?db={Uri.EscapeDataString(_database)}";
56-
if (!string.IsNullOrEmpty(_username))
57-
endpoint += $"&u={Uri.EscapeDataString(_username)}&p={Uri.EscapeDataString(_password)}";
58-
59-
switch (precision)
60-
{
61-
case Precision.Microseconds:
62-
endpoint += "&precision=u";
63-
break;
64-
case Precision.Milliseconds:
65-
endpoint += "&precision=ms";
66-
break;
67-
case Precision.Seconds:
68-
endpoint += "&precision=s";
69-
break;
70-
case Precision.Minutes:
71-
endpoint += "&precision=m";
72-
break;
73-
case Precision.Hours:
74-
endpoint += "&precision=h";
75-
break;
76-
}
77-
78-
var content = new StringContent(payload, Encoding.UTF8);
79-
8041
var buffer = Encoding.UTF8.GetBytes(payload);
8142
int len = await _udpClient.SendAsync(buffer, buffer.Length, _udpHostName, _udpPort);
8243
return new LineProtocolWriteResult(len == buffer.Length, null);

test/Consoles/InfluxDb.UdpSupport.ConsoleTest/Program.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,31 @@
1010
using System.Threading;
1111
using System.Threading.Tasks;
1212

13+
// influx-db command line:
14+
// start with
15+
// # influx
16+
// # show databases
17+
// # CREATE DATABASE {name}
18+
// # DROP DATABASE {name}
19+
// # precision rfc3339
20+
// # use <database>
21+
// # SHOW MEASUREMENTS
22+
// # SHOW MEASUREMENTS WITH MEASUREMENT =~ /v1\..*/ -- all fields from measurements that start with 'v1.'
23+
// # SHOW SERIES
24+
// # SHOW SERIES [FROM <measurement_name> [WHERE <tag_key>='<tag_value>']]
25+
// # DROP SERIES FROM /v1.*\.end/
26+
// # SHOW TAG KEYS
27+
// # SHOW TAG KEYS FROM "v1.cos"
28+
// # SHOW FIELD KEYS
29+
// # SHOW FIELD KEYS FROM /v1\..*\.sin/ -- all fields from series that start with 'v1.' and end with '.sin'
30+
31+
/*
32+
# influx
33+
docker run --name influx -p 8086:8086 -p 8089:8089/udp -p 8088:8088 -v C:\Docker\Volumes\influxdb\db:/var/lib/influxdb -v C:\Docker\Volumes\influxdb\config\influxdb.conf:/etc/influxdb/influxdb.conf:ro influxdb -config /etc/influxdb/influxdb.conf
34+
docker run -d -p 8083:8083 -p 8086:8086 -p 8089:4444/udp --expose 8083 --expose 8086 --expose 4444 -e UDP_DB="playground" tutum/influxdb
35+
36+
*/
37+
1338
namespace InfluxDb.UdpSupport.ConsoleTest
1439
{
1540
class Program
@@ -22,7 +47,7 @@ static void Main(string[] args)
2247
Metrics.Collector = new CollectorConfiguration()
2348
.Tag.With("process", Path.GetFileName(process.Id.ToString()))
2449
.Batch.AtInterval(TimeSpan.FromSeconds(2))
25-
.WriteTo.InfluxDB("udp://localhost:8999", "data")
50+
.WriteTo.InfluxDB("udp://localhost:8089", "data")
2651
.CreateCollector();
2752

2853
int i = 0;

0 commit comments

Comments
 (0)