Add ability for calcsticker to wait on depedencies

This commit is contained in:
2025-04-17 11:03:09 -04:00
parent 449b3743a9
commit a26e7da621
4 changed files with 41 additions and 2 deletions

View File

@@ -37,7 +37,7 @@ namespace MarketData.Services
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFINANCIALSTATEMENTS"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFINANCIALSTATEMENTS");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFUNDAMENTALS"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFUNDAMENTALS");
MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEHISTORICAL"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEHISTORICAL");
MDTrace.WriteLine(LogLevel.DEBUG,"CALCSTICKER"); MDTrace.WriteLine(LogLevel.DEBUG,"CALCSTICKER /WAITFORCOMPLETION:{argument1,argument2,...} For example CALCSTICKER /WAITFORCOMPLETION:UPDATEFINANCIALSTATEMENTS,UPDATEFUNDAMENTALS,UPDATEHISTORICAL");
MDTrace.WriteLine(LogLevel.DEBUG,"MGSHSESSION /SESSIONFILE:"); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHSESSION /SESSIONFILE:");
MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNBACKTEST /USEHEDGING: /HEDGEINITIALCASH: /USESTOPLIMITS: /KEEPSLOTPOSITIONS: /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /SESSIONFILE: "); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNBACKTEST /USEHEDGING: /HEDGEINITIALCASH: /USESTOPLIMITS: /KEEPSLOTPOSITIONS: /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /SESSIONFILE: ");
MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNDAILY /SESSIONFILE: /TRADEDATE:"); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNDAILY /SESSIONFILE: /TRADEDATE:");
@@ -134,6 +134,16 @@ namespace MarketData.Services
// ********************************************************************************************************************************************************** // **********************************************************************************************************************************************************
public async Task TaskCalcSticker(CommandArgs commandArgs) public async Task TaskCalcSticker(CommandArgs commandArgs)
{ {
int WAIT_TIME = 60000; // 1 minute intervals
if(commandArgs.Has("WAITFORCOMPLETION"))
{
List<String> processArguments = Utility.ToList(commandArgs.Get<String>("WAITFORCOMPLETION"),',');
while(Utility.IsProcessRunning("mk",processArguments))
{
MDTrace.WriteLine(LogLevel.DEBUG,$"CALCSTICKER is waiting for items in the process completion list {commandArgs.Get<String>("WAITFORCOMPLETION")}");
try{Thread.Sleep(WAIT_TIME);}catch(Exception){;}
}
}
CalcSticker(); CalcSticker();
await Task.FromResult(true); await Task.FromResult(true);
} }

View File

@@ -0,0 +1,16 @@
using System.Diagnostics;
namespace MarketData.Extensions
{
public static class ProcessExtensions
{
public static List<String> GetUnixCommandArguments(this Process process)
{
List<String> commandArguments = new List<String>();
String commandFile = $"/proc/{ process.Id }/cmdline";
if(!File.Exists(commandFile))return commandArguments;
String commandLine = File.ReadAllText(commandFile);
return commandLine.Split('\0').ToList();
}
}
}

View File

@@ -5,6 +5,7 @@ using System.Diagnostics;
using MarketData.MarketDataModel; using MarketData.MarketDataModel;
using System.Security.Principal; using System.Security.Principal;
using ThreadState=System.Threading.ThreadState; using ThreadState=System.Threading.ThreadState;
using MarketData.Extensions;
namespace MarketData.Utils namespace MarketData.Utils
{ {
@@ -13,6 +14,18 @@ namespace MarketData.Utils
private static DateTime epoch = DateTime.Parse("01-01-0001"); private static DateTime epoch = DateTime.Parse("01-01-0001");
private static TimeSpan oneDay=new TimeSpan(1,0,0,0); private static TimeSpan oneDay=new TimeSpan(1,0,0,0);
public static bool IsProcessRunning(String processName, List<String> commandArgs)
{
List<Process> processList = Process.GetProcessesByName(processName).ToList();
if(0==processList.Count)return false;
foreach(Process process in processList)
{
List<String> processCommandArguments = process.GetUnixCommandArguments();
List<String> intersection = processCommandArguments.Where(processCommandArg => commandArgs.Any(commandArg => processCommandArg.Equals(commandArg))).ToList();
if(intersection.Count>0)return true;
}
return false;
}
public static String ThreadStateToString(Thread thread) public static String ThreadStateToString(Thread thread)
{ {

View File

@@ -134,4 +134,4 @@ CRON_DIR=/opt/MarketData/MarketData
0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFINANCIALSTATEMENTS > /dev/null 2>&1 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFINANCIALSTATEMENTS > /dev/null 2>&1
0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFUNDAMENTALS > /dev/null 2>&1 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEFUNDAMENTALS > /dev/null 2>&1
0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEHISTORICAL > /dev/null 2>&1 0 0 17 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk UPDATEHISTORICAL > /dev/null 2>&1
0 0 18 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk CALCSTICKER > /dev/null 2>&1 0 0 18 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk CALCSTICKER /WAITFORCOMPLETION:UPDATEFINANCIALSTATEMENTS,UPDATEFUNDAMENTALS,UPDATEHISTORICAL > /dev/null 2>&1