public async Task <IActionResult> InstantForecast() { var viewModel = new InstantForecastModal(); const int periods = 24; const int dataHours = 230; const bool hourlySeasonality = false; const bool dailySeasonality = false; var numFormat = new CultureInfo("en-US", false).NumberFormat; numFormat.PercentDecimalDigits = 3; var symbol = _appSettings.Value.InstantForecast; var coin = new Logic(_appSettings, symbol, dataHours, currentLocation); var manager = new DirectoryManager(_appSettings, currentLocation); var pythonRun = new Logic(_appSettings); StaticUtility.RequestCounter = (manager.GetRequestCount()); try { var pathToFolder = manager.GenerateForecastFolder(symbol, periods, DirSwitcher.Instant); if (!coin.GenerateCsvFile(pathToFolder)) { throw new Exception("Something's wrong with a coin"); } pythonRun.PythonExecutor(manager.GetLastFolder(DirSwitcher.Instant), periods, hourlySeasonality, dailySeasonality); var pathToOut = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutFile); var pathToComponents = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutComponents); var pathToForecast = Path.Combine(manager.GetLastFolder(DirSwitcher.Instant), manager.OutForecast); var pathToForecastForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Instant), manager.OutForecast); var outCreated = await StaticUtility.WaitForFile(pathToOut, 60); var componentsCreated = await StaticUtility.WaitForFile(pathToComponents, 10); var forecastCreated = await StaticUtility.WaitForFile(pathToForecast, 10); var tableInstant = new List <TableRow>(); if (outCreated) { tableInstant = StaticUtility.BuildOutTableRows(pathToOut, periods).ToList(); } else { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "out.csv not found", requestCount = StaticUtility.RequestCounter })); } if (forecastCreated) { viewModel.ForecastPath = Path.DirectorySeparatorChar + pathToForecastForImg; } else { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "forecast.png not found", requestCount = StaticUtility.RequestCounter })); } if (!componentsCreated) { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "components.png not found", requestCount = StaticUtility.RequestCounter })); } manager.UpdateRequests(StaticUtility.RequestCounter); viewModel.AssetName = symbol; var performance = coin.DefineTrend(tableInstant); viewModel.Indicator = performance.Indicator; viewModel.Rate = performance.Rate.ToString("P", numFormat); } catch (Exception e) { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = e.Message, requestCount = StaticUtility.RequestCounter })); } return(Json(viewModel)); }
public async Task <IActionResult> ManualForecast(string symbol, int dataHours, int periods, bool hourlySeasonality, bool dailySeasonality) { var viewModel = new MainViewModel(); var coin = new Logic(_appSettings, symbol, dataHours, currentLocation); var manager = new DirectoryManager(_appSettings, currentLocation); var pythonRun = new Logic(_appSettings); StaticUtility.RequestCounter = (manager.GetRequestCount()); try { var pathToFolder = manager.GenerateForecastFolder(symbol, periods, DirSwitcher.Manual); if (!coin.GenerateCsvFile(pathToFolder)) { throw new Exception("Something's wrong with a coin"); } pythonRun.PythonExecutor(manager.GetLastFolder(DirSwitcher.Manual), periods, hourlySeasonality, dailySeasonality); var pathToOut = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutFile); var pathToComponents = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutComponents); var pathToForecast = Path.Combine(manager.GetLastFolder(DirSwitcher.Manual), manager.OutForecast); var pathToComponentsForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Manual), manager.OutComponents); var pathToForecastForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Manual), manager.OutForecast); var outCreated = await StaticUtility.WaitForFile(pathToOut, 60); var componentsCreated = await StaticUtility.WaitForFile(pathToComponents, 10); var forecastCreated = await StaticUtility.WaitForFile(pathToForecast, 10); if (outCreated) { viewModel.Table = StaticUtility.BuildOutTableRows(pathToOut, periods); } else { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "out.csv not found", requestCount = StaticUtility.RequestCounter })); } if (forecastCreated) { viewModel.ForecastPath = Path.DirectorySeparatorChar + pathToForecastForImg; } else { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "forecast.png not found", requestCount = StaticUtility.RequestCounter })); } if (componentsCreated) { viewModel.ComponentsPath = Path.DirectorySeparatorChar + pathToComponentsForImg; } else { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = "components.png not found", requestCount = StaticUtility.RequestCounter })); } manager.UpdateRequests(StaticUtility.RequestCounter); viewModel.RequestsPerDay = StaticUtility.RequestCounter;//manager.CurrentCounts; viewModel.AssetName = symbol; var performance = coin.DefineTrend(viewModel.Table); viewModel.Indicator = performance.Indicator; } catch (Exception e) { manager.UpdateRequests(StaticUtility.RequestCounter); return(NotFound(new { message = e.Message, requestCount = StaticUtility.RequestCounter })); } return(Json(viewModel)); }
public IActionResult GetForecastData(Indicator indicator, string assetName, int periods) { var viewModel = new MainViewModel(); var manager = new DirectoryManager(_appSettings, currentLocation); var folder = manager.GetLastFolder(DirSwitcher.Auto); try { string indicatorDir; string dir; switch (indicator) { case Indicator.Positive: indicatorDir = manager.DirPositive; dir = Path.Combine(folder, indicatorDir); break; case Indicator.Neutral: indicatorDir = manager.DirNeutral; dir = Path.Combine(folder, indicatorDir); break; case Indicator.Negative: indicatorDir = manager.DirNegative; dir = Path.Combine(folder, indicatorDir); break; case Indicator.StrongPositive: indicatorDir = manager.DirStrongPositive; dir = Path.Combine(folder, indicatorDir); break; default: throw new ArgumentOutOfRangeException(nameof(indicator), indicator, null); } var targetFolder = DirectoryManager.GetForecastFolderByName(dir, assetName); var pathToOut = Path.Combine(dir, targetFolder, manager.OutFile); var pathToComponentsForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Auto), indicatorDir, targetFolder, manager.OutComponents); var pathToForecastForImg = Path.Combine(_appSettings.Value.ForecastDir, manager.DirForImages(DirSwitcher.Auto), indicatorDir, targetFolder, manager.OutForecast); viewModel.ComponentsPath = Path.DirectorySeparatorChar + pathToComponentsForImg; viewModel.ForecastPath = Path.DirectorySeparatorChar + pathToForecastForImg; viewModel.RequestsPerDay = manager.GetRequestCount(); viewModel.AssetName = assetName; viewModel.Indicator = indicator; viewModel.Table = StaticUtility.BuildOutTableRows(pathToOut, periods); } catch (Exception e) { return(NotFound(new { message = e.Message })); } return(Json(viewModel)); }