public ActionResult LoadBackup([FromQuery] string begin, [FromQuery] string end, [FromQuery] string tablefilter) { if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span)) { return(StatusCode((int)HttpStatusCode.NotFound)); } var tableFilterList = ((string.IsNullOrWhiteSpace(tablefilter) ? null : tablefilter)?.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(name => name.Trim()).ToList()) ?? new List <string>(); return(Json(new { tables = _backupService.CreateBackup(span.Begin.Date, span.End.Date, tableFilterList) })); }
public async Task <ActionResult> PollSonnenManually([FromQuery] string begin, [FromQuery] string end) { if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span)) { return(StatusCode((int)HttpStatusCode.NotFound)); } foreach (var day in span.IncludedDates()) { await _sonnenPollingService.PollSensorValues(day, day.AddDays(1)); } return(StatusCode((int)HttpStatusCode.OK)); }
public ActionResult ComputeHeatingLowResFromMidRes([FromQuery] string begin, [FromQuery] string end) { if (_heatingPollingService == null) { return(StatusCode((int)HttpStatusCode.BadRequest)); } if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span)) { return(StatusCode((int)HttpStatusCode.NotFound)); } _heatingPollingService.GenerateLowResHeatingSeries(span.Begin, span.End); return(StatusCode((int)HttpStatusCode.OK)); }
public void TestTimeSeriesSpanTryParse(string countIn, int expectedCount, bool expectedParsingResult) { var millisecPrecision = TimeSpan.FromMilliseconds(1); var beginTime = DateTime.UtcNow; var endTime = beginTime.AddDays(1); var begin = new DateTimeOffset(beginTime).ToUnixTimeMilliseconds().ToString(); var end = new DateTimeOffset(endTime).ToUnixTimeMilliseconds().ToString(); Assert.Equal(expectedParsingResult, TimeSeriesSpanParser.TryParse(begin, end, countIn, out TimeSeriesSpan span)); if (!expectedParsingResult) { return; } Assert.Equal(beginTime, span.Begin, millisecPrecision); Assert.Equal(endTime, span.End, millisecPrecision); Assert.Equal(expectedCount, span.Count); Assert.Equal((endTime - beginTime) / expectedCount, span.Duration); }
public async Task <ActionResult> PollNetatmoManually([FromQuery] string begin, [FromQuery] string end) { if (!TimeSeriesSpanParser.TryParse(begin, end, 1.ToString(), out TimeSeriesSpan span)) { return(StatusCode((int)HttpStatusCode.NotFound)); } ActionResult Error(int statusCode, string message) { var result = Json(new { ok = false, error = message }); result.StatusCode = statusCode; return(result); } try { foreach (var day in span.IncludedDates()) { await _netatmoPollingService.PollSensorValues(day, day.AddDays(1)); } } catch (Exception ex) { if (ex.Message.Contains("rate limit", StringComparison.InvariantCultureIgnoreCase)) { return(Error(429, "rate limit reached at netatmo api!")); } else if (ex.Message.Contains("authenticate", StringComparison.InvariantCultureIgnoreCase)) { return(Error(502, "could not authenticate at netatmo api!")); } else { return(Error(500, "unknown reason")); } } return(StatusCode((int)HttpStatusCode.OK)); }