Skip to content

Commit 4e860a5

Browse files
committed
Added in some restart logic when the maximum number of errors has occurred.
1 parent aaa3fde commit 4e860a5

7 files changed

Lines changed: 51 additions & 0 deletions

File tree

Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace SolarUseOptimiser
44
{
55
public class Constants
66
{
7+
public const string MAX_ERRORS = "MaxErrors";
78
public class ConfigSections
89
{
910
public const string HUAWEI_CONFIG_SECTION = "Huawei";

GrowattProducer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public GrowattProducer(IConfiguration configuration, ILogger<GrowattProducer> lo
7676
this.configuration = configuration;
7777
}
7878

79+
public async Task Restart(CancellationTokenSource cancellationTokenSource)
80+
{
81+
initialised = false;
82+
await InitialiseAsync(cancellationTokenSource);
83+
}
84+
7985
public async Task<IDataSource> InitialiseAsync(CancellationTokenSource cancellationTokenSource)
8086
{
8187
if (!initialised)

HuaweiProducer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public HuaweiProducer(IConfiguration configuration, ILogger<HuaweiProducer> logg
7676
this.configuration = configuration;
7777
}
7878

79+
public async Task Restart(CancellationTokenSource cancellationTokenSource)
80+
{
81+
initialised = false;
82+
await InitialiseAsync(cancellationTokenSource);
83+
}
84+
7985
public async Task<IDataSource> InitialiseAsync(CancellationTokenSource cancellationTokenSource)
8086
{
8187
if (!initialised)

IDataSource.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,7 @@ bool IsInitialised
2727
Task<bool> Authenticate(CancellationTokenSource cancellationTokenSource);
2828

2929
SiteMeterPush GetSiteMeterData(string userId, CancellationTokenSource cancellationTokenSource);
30+
31+
Task Restart(CancellationTokenSource cancellationTokenSource);
3032
}
3133
}

IoTaWattProducer.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ public IoTaWattProducer(IConfiguration configuration, ILogger<IoTaWattProducer>
4040
this.configuration = configuration;
4141
}
4242

43+
public async Task Restart(CancellationTokenSource cancellationTokenSource)
44+
{
45+
IsInitialised = false;
46+
await InitialiseAsync(cancellationTokenSource);
47+
}
48+
4349
public Task<IDataSource> InitialiseAsync(CancellationTokenSource cancellationTokenSource)
4450
{
4551
if (!IsInitialised)

PeriodicPoller.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class PeriodicPoller
2323

2424
private bool initialised = false;
2525

26+
private int errorCount = 0;
27+
2628
private Timer Timer
2729
{
2830
get; set;
@@ -38,6 +40,11 @@ private IDataSource DataSource
3840
get; set;
3941
}
4042

43+
private int MaxErrors
44+
{
45+
get; set;
46+
}
47+
4148
private static CancellationTokenSource CancellationTokenSource;
4249

4350
public PeriodicPoller(IConfiguration configuration, IDataSource dataProducer, IDataTarget dataConsumer, ILogger<PeriodicPoller> logger)
@@ -46,6 +53,21 @@ public PeriodicPoller(IConfiguration configuration, IDataSource dataProducer, ID
4653
this.DataSource = dataProducer;
4754
this.DataTarget = dataConsumer;
4855

56+
try
57+
{
58+
this.MaxErrors = configuration.GetValue<int>(Constants.MAX_ERRORS);
59+
if (this.MaxErrors == 0)
60+
{
61+
logger.LogError("Failed to read the MaxErrors configuration for how many times to have an error before forcing a restart. Using a default of 5.");
62+
this.MaxErrors = 2;
63+
}
64+
}
65+
catch (Exception ex)
66+
{
67+
logger.LogError(ex, "Failed to read the MaxErrors configuration for how many times to have an error before forcing a restart. Using a default of 5.");
68+
this.MaxErrors = 2;
69+
}
70+
4971
this.logger = logger;
5072
}
5173

@@ -137,6 +159,7 @@ private void PollGenerationStatistics_Elapsed(object sender, ElapsedEventArgs e)
137159
}
138160
else
139161
{
162+
errorCount++;
140163
bool sentErrorDataSuccess = DataTarget.SendErrorData(pushData).GetAwaiter().GetResult();
141164
if (sentErrorDataSuccess)
142165
{
@@ -146,6 +169,12 @@ private void PollGenerationStatistics_Elapsed(object sender, ElapsedEventArgs e)
146169
{
147170
logger.LogError("Failed to send the error data to {0}.", DataTarget.Name);
148171
}
172+
if (errorCount >= MaxErrors)
173+
{
174+
logger.LogWarning("The maximum number of errors has occurred and the system is being reset.");
175+
DataSource.Restart(CancellationTokenSource);
176+
errorCount = 0;
177+
}
149178
}
150179
}
151180
}

appsettings.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"MaxErrors": 2,
23
"Routing": {
34
"DataSource": "Huawei || Growatt",
45
"Target": "ChargeHQ"

0 commit comments

Comments
 (0)