Add OPTIMIZEDB task and add to CRON

This commit is contained in:
2025-05-17 12:18:12 -04:00
parent 971e0f96cb
commit a59a6961a0
3 changed files with 106 additions and 11 deletions

View File

@@ -53,6 +53,7 @@ namespace MarketData.Services
MDTrace.WriteLine(LogLevel.DEBUG,@"MGGAINLOSS /SESSIONFILE:{PATHSESSIONFILE} (i.e.) MGGAINLOSS /SESSIONFILE:C:\boneyard\marketdata\bin\Debug\saferun\MG20180131.txt");
MDTrace.WriteLine(LogLevel.DEBUG,"RUNBACKTEST /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /{SESSIONFILE}:");
MDTrace.WriteLine(LogLevel.DEBUG,"CALCBETAS recalculates beta36, beta24, and bet06 for Fundamentals");
MDTrace.WriteLine(LogLevel.DEBUG,"OPTIMIZEDB optimizes the database tables");
MDTrace.WriteLine(LogLevel.DEBUG,"ECHO {param1} {param2} {param(n)");
}
@@ -95,6 +96,7 @@ namespace MarketData.Services
tasks.Add("MGGAINLOSS",TaskMGRunMGGainLoss);
tasks.Add("RUNBACKTEST",TaskMGRunMGBacktest);
tasks.Add("CALCBETAS",TaskCalcBetas);
tasks.Add("OPTIMIZEDB",TaskOptimizeDatabase);
tasks.Add("ECHO",TaskEcho);
GlobalConfig.Instance.Configuration = configuration; // This call sets up configuration stuff so it needs to be first.
@@ -224,7 +226,7 @@ namespace MarketData.Services
public async Task TaskUpdateSECFilingsWatchList(CommandArgs commandArgs)
{
if(!commandArgs.Has("WATCHLIST")){Console.WriteLine("UPDATESECFILINGSWATCHLIST REQUIRES WATCHLIST");return;}
if(!commandArgs.Has("WATCHLIST")){MDTrace.WriteLine(LogLevel.DEBUG,"UPDATESECFILINGSWATCHLIST REQUIRES WATCHLIST");return;}
String watchListName = commandArgs.Coalesce<String>("WATCHLIST");
List<String> symbols = WatchListDA.GetWatchList(watchListName);
SECFilingMarketDataHelper secFilingMarketDataHelper=new SECFilingMarketDataHelper();
@@ -234,7 +236,7 @@ namespace MarketData.Services
public async Task TaskLoadHeadlinesWatchList(CommandArgs commandArgs)
{
if(!commandArgs.Has("WATCHLIST")){Console.WriteLine("LOADHEADLINESWATCHLIST REQUIRES WATCHLIST");return;}
if(!commandArgs.Has("WATCHLIST")){MDTrace.WriteLine(LogLevel.DEBUG,"LOADHEADLINESWATCHLIST REQUIRES WATCHLIST");return;}
else LoadHeadlinesWatchList(commandArgs.Coalesce<String>("WATCHLIST"));
await Task.FromResult(true);
}
@@ -247,7 +249,7 @@ namespace MarketData.Services
public async Task TaskUpdateDaily2(CommandArgs commandArgs)
{
if(!commandArgs.Has("DATE")){Console.WriteLine("UPDATEDAILY2 MISSING DATE");return;}
if(!commandArgs.Has("DATE")){MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEDAILY2 MISSING DATE");return;}
UpdateDaily2(commandArgs.Coalesce<DateTime>("DATE"));
await Task.FromResult(true);
}
@@ -260,7 +262,7 @@ namespace MarketData.Services
public async Task TaskUpdateLatestPriceWatchList(CommandArgs commandArgs)
{
if(!commandArgs.Has("WATCHLIST")){Console.WriteLine("UPDATELATESTPRICEWATCHLIST MISSING WATCHLIST");return;}
if(!commandArgs.Has("WATCHLIST")){MDTrace.WriteLine(LogLevel.DEBUG,"UPDATELATESTPRICEWATCHLIST MISSING WATCHLIST");return;}
UpdateLatestPriceWatchList(commandArgs.Coalesce<String>("WATCHLIST"));
await Task.FromResult(true);
}
@@ -336,9 +338,32 @@ namespace MarketData.Services
FundamentalDA.UpdateBeta(symbol, date, betaCalc36, betaCalc24, betaCalc06);
}
}
MDTrace.WriteLine($"Total took {profiler.End()} (ms)");
MDTrace.WriteLine(LogLevel.DEBUG,$"Total took {profiler.End()} (ms)");
await Task.FromResult(true);
}
}
/// <summary>
/// Performs optimization on the database tables. Since we don't want to run this if any of the monthly updates is running we will check for those tasks and wait for them
/// to complete (if running).
/// </summary>
/// <param name="commandArgs"></param>
/// <returns></returns>
public async Task TaskOptimizeDatabase(CommandArgs commandArgs)
{
int WAIT_TIME_INTERVAL = 120000; // 2 minute intervals between checks.
Profiler profiler = new Profiler();
MDTrace.WriteLine(LogLevel.DEBUG, $"Starting...");
List<String> monthlyUpdateProcessList = new List<String> { "UPDATEFINANCIALSTATEMENTS", "UPDATEFUNDAMENTALS", "UPDATEHISTORICAL", "CALCSTICKER" };
while (Utility.IsProcessRunning("mk", monthlyUpdateProcessList))
{
MDTrace.WriteLine(LogLevel.DEBUG, $"OPTIMIZEDB is waiting for items in the process completion list {Utility.ListToString(monthlyUpdateProcessList)}");
try { Thread.Sleep(WAIT_TIME_INTERVAL); } catch (Exception) {; }
}
MaintenanceDA.OptimizeDatabase();
MDTrace.WriteLine(LogLevel.DEBUG, $"Total took {profiler.End()} (ms)");
await Task.FromResult(true);
}
public async Task TaskMGSHSession(CommandArgs commandArgs)
{
@@ -431,7 +456,7 @@ namespace MarketData.Services
Trace.Listeners.Remove("Default");
Console.WriteLine($"Adding Trace Listener :{currentWorkingDirectory+logFolder+"/"+strLogFile}");
Trace.Listeners.Add(new TextWriterTraceListener(currentWorkingDirectory+logFolder+"/"+strLogFile));
MDTrace.WriteLine($"Trace Listener added.");
MDTrace.WriteLine(LogLevel.DEBUG,$"Trace Listener added.");
Utility.ShowLogs(currentWorkingDirectory + logFolder);
return true;
}
@@ -651,7 +676,7 @@ namespace MarketData.Services
Profiler profiler = new Profiler();
try
{
MDTrace.WriteLine("Started.");
MDTrace.WriteLine(LogLevel.DEBUG,"Started.");
PriceIndices priceIndices=MarketDataHelper.GetConsumerPriceIndices();
if(null==priceIndices)
{
@@ -697,7 +722,7 @@ namespace MarketData.Services
Profiler profiler = new Profiler();
try
{
MDTrace.WriteLine("Started.");
MDTrace.WriteLine(LogLevel.DEBUG,"Started.");
EconomicIndicators economicIndicators=MarketDataHelper.GetGDPPerCapita();
if(null==economicIndicators||0==economicIndicators.Count)
{
@@ -857,7 +882,7 @@ namespace MarketData.Services
Profiler profiler = new Profiler();
try
{
MDTrace.WriteLine("Updating splits.");
MDTrace.WriteLine(LogLevel.DEBUG,"Updating splits.");
Splits splits=MarketDataHelper.GetSplits();
if(null==splits||0==splits.Count)return;
MDTrace.WriteLine(LogLevel.DEBUG,String.Format("Got {0} split records.",splits.Count));
@@ -880,7 +905,7 @@ namespace MarketData.Services
Profiler profiler = new Profiler();
try
{
MDTrace.WriteLine("Processing all splits");
MDTrace.WriteLine(LogLevel.DEBUG,"Processing all splits");
Splits splits=SplitsDA.GetUnappliedSplits();
if(null==splits||0==splits.Count)return;
SplitHelper.ProcessSplits(splits);