public static async Task Run([TimerTrigger("0 0 22 * * 5")] TimerInfo myTimer, TraceWriter log) { log.Info($"Start MonthlyChartImage at: {DateTime.Now}"); try { var appConfig = AppConfig.Load(); var storageClient = new StorageClient(); log.Info("Start connect to table storage"); await storageClient.ConnectAsync(appConfig.StorageConnectionString); var yesterday = DateTimeOffset.UtcNow.AddDays(-1); var begin = new DateTimeOffset(yesterday.Year, yesterday.Month, 1, 0, 0, 0, AppConfig.LocalTimeZone.BaseUtcOffset); var end = begin.AddMonths(1); IEnumerable <WeightEntity> monthlyWeights = storageClient.LoadMeasurementData(InnerScanTag.Weight.ToString(), begin, end) .Cast <WeightEntity>(); Image <int, double> chartImage = MakeMonthlyWeightChart(yesterday.Year, yesterday.Month, monthlyWeights); string imageJson = GenerateChartImageJson(chartImage); var plotlyApi = new Plotly.Api(appConfig.PlotlyUserName, appConfig.PlotlyApiKey); byte[] image = await plotlyApi.ImagesAsync(imageJson); using (var writer = new System.IO.FileStream("result.png", System.IO.FileMode.Create, System.IO.FileAccess.Write)) { await writer.WriteAsync(image, 0, image.Length); } } catch (Exception e) { log.Error($"Exception: {e.ToString()}"); } finally { log.Info($"Finish MonthlyChartImage at: {DateTime.Now}"); } }
public static async Task Run([TimerTrigger("0 0 16 * * *")] TimerInfo myTimer, TraceWriter log) { log.Info($"Start DailyPersistence at: {DateTime.Now}"); try { var appConfig = AppConfig.Load(); var storageClient = new StorageClient(); log.Info("Start connect to table storage"); await storageClient.ConnectAsync(appConfig.StorageConnectionString); var lastMeasurementDate = storageClient.LoadLastMeasurementDate(); DateTimeOffset?from; if (lastMeasurementDate.HasValue) { log.Info($"Last measurement date: {lastMeasurementDate.Value.ToString()}"); from = lastMeasurementDate.Value.ToOffset(AppConfig.LocalTimeZone.BaseUtcOffset); } else { log.Info("No measurement"); from = null; } var api = new Api(userAgent); log.Info("Start Log in"); await api.LoginAsync(appConfig.LoginId, appConfig.Password); log.Info("Start authentication"); string oAuthToken = await api.AuthenticateAsync(appConfig.ClientId); log.Info("Start approve"); string code = await api.ApproveAsync(oAuthToken); log.Info("Start get token"); Token token = await api.GetTokenAsync(appConfig.ClientId, appConfig.ClientSecret, code); log.Info("Start get inner scan status"); Status status = await api.GetInnerScanStatus(token.AccessToken, from); log.Info("Start inserting entities to storage"); var entityFactory = new EntityFactory(); IEnumerable <InnerScanStatusEntity> entities = entityFactory.MakeFrom(status); await storageClient.BatchInsertAsync(entities); DateTimeOffset measurementDate = entities.Select(entity => entity.MeasurementDate).Max(); if (!lastMeasurementDate.HasValue || lastMeasurementDate.Value < measurementDate) { log.Info("Start updating last measurement date"); await storageClient.UpdateLastMeasurementDate(measurementDate); } } catch (Exception e) { log.Error($"Exception: {e.ToString()}"); } finally { log.Info($"Finish DailyPersistence at: {DateTime.Now}"); } }