forked from chetanmsft/utilities
/
EventHubObserver.cs
70 lines (63 loc) · 2.13 KB
/
EventHubObserver.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
using Microsoft.ServiceBus.Messaging;
using Newtonsoft.Json;
namespace SensorEventGenerator
{
class EventHubObserver : IObserver<List<Sensor>>
{
private EventHubConfig _config;
private EventHubClient _eventHubClient;
private Logger _logger;
private bool initialized = false;
public EventHubObserver(EventHubConfig config)
{
_config = config;
if (!string.IsNullOrWhiteSpace(_config.ConnectionString))
{
_eventHubClient = EventHubClient.CreateFromConnectionString(_config.ConnectionString, _config.EventHubName);
}
else
{
throw new ArgumentException("EventHub ConnectionString is null or empty");
}
this._logger = new Logger(ConfigurationManager.AppSettings["logger_path"]);
}
public void OnNext(List<Sensor> sensorData)
{
try
{
var serializedString = JsonConvert.SerializeObject(sensorData);
EventData data = new EventData(Encoding.UTF8.GetBytes(serializedString)) { PartitionKey = sensorData[0].Pkey.ToString() };
_eventHubClient.Send(data);
if (!initialized)
{
_logger.Write("Started sending" + serializedString + " at: " + sensorData[0].Time);
initialized = true;
}
}
catch (MessagingException mse)
{
_logger.Write(mse.Message);
if (!mse.IsTransient)
{
throw;
}
}
catch (Exception ex)
{
_logger.Write(ex);
throw;
}
}
public void OnCompleted() => throw new NotImplementedException();
public void OnError(Exception error)
{
_logger.Write(error);
throw error;
}
}
}