Exemple #1
0
 protected override async Task ExecuteAsync(CancellationToken stoppingToken)
 {
     while (!stoppingToken.IsCancellationRequested)
     {
         try
         {
             var latest = await OctopusStoreService.ReadLastPriceEntryAsync();
             await ProcessNewerValues(latest, stoppingToken);
         }
         catch (Exception ex) when(!stoppingToken.IsCancellationRequested)
         {
             Logger.LogWarning(ex, "Error in price service: {Exception}", ex.Message);
         }
         await Task.Delay(TimeSpan.FromHours(1), stoppingToken);
     }
 }
Exemple #2
0
        private async Task ProcessNewerValues(OctopusPriceEntry?latest, CancellationToken ct)
        {
            Instant requestTime;
            IReadOnlyList <OctopusConsumptionEntry> consumptionEntries;

            if (latest == null)
            {
                var flux = $@"
from(bucket: ""{Bucket}"")
|> range(start: -12mo)
|> filter(fn: (r) => r._measurement == ""Consumption"")
|> pivot(
    rowKey:[""_time""],
    columnKey: [""_field""],
    valueColumn: ""_value""
)";
                consumptionEntries = await OctopusStoreService.QueryAsync <OctopusConsumptionEntry>(flux);

                if (consumptionEntries.Count == 0)
                {
                    requestTime = Instant.FromUtc(2020, 1, 1, 0, 0);
                }
                else
                {
                    requestTime = consumptionEntries[0].Time.Plus(Duration.FromMinutes(30));
                }
            }
            else
            {
                requestTime = latest.Time.Plus(Duration.FromMinutes(30));
                var flux = $@"
from(bucket: ""{Bucket}"")
|> range(start: {requestTime})
|> filter(fn: (r) => r._measurement == ""Consumption"")
|> pivot(
    rowKey:[""_time""],
    columnKey: [""_field""],
    valueColumn: ""_value""
)";
                consumptionEntries = await OctopusStoreService.QueryAsync <OctopusConsumptionEntry>(flux);
            }

            if (consumptionEntries.Count > 0)
            {
                var tariffEntries = await QueryTarrifEntries(requestTime);

                Logger.LogInformation("Got {Count} tariff entries from {First} to {Last} - requested = {Request}", tariffEntries.Count, tariffEntries[0], tariffEntries[^ 1], requestTime);
Exemple #3
0
 public OctopusTariffService(ILogger<OctopusTariffService> logger, OctopusService octopusService, OctopusStoreService octopusStoreService)
 {
     Logger = logger;
     OctopusService = octopusService;
     OctopusStoreService = octopusStoreService;
 }
Exemple #4
0
 public OctopusPriceService(ILogger <OctopusPriceService> logger, OctopusStoreService octopusStoreService, IOptions <InfluxDbService.Config> influxConfigOptions)
 {
     Logger = logger;
     OctopusStoreService = octopusStoreService;
     Bucket = influxConfigOptions.Value.Bucket;
 }
 public OctopusConsumptionService(ILogger <OctopusConsumptionService> logger, OctopusService octopusService, OctopusStoreService octopusStoreService)
 {
     Logger              = logger;
     OctopusService      = octopusService;
     OctopusStoreService = octopusStoreService;
 }