From a26e7da621848785ecee43e09264be9198b8122d Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 17 Apr 2025 11:03:09 -0400 Subject: [PATCH] Add ability for calcsticker to wait on depedencies --- MarketData/MarketData/Services/MainService.cs | 12 +++++++++++- .../Extensions/ProcessExtensions.cs | 16 ++++++++++++++++ MarketData/MarketDataLib/Utility/Utility.cs | 13 +++++++++++++ README.md | 2 +- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 MarketData/MarketDataLib/Extensions/ProcessExtensions.cs diff --git a/MarketData/MarketData/Services/MainService.cs b/MarketData/MarketData/Services/MainService.cs index b31c421..228c591 100755 --- a/MarketData/MarketData/Services/MainService.cs +++ b/MarketData/MarketData/Services/MainService.cs @@ -37,7 +37,7 @@ namespace MarketData.Services MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFINANCIALSTATEMENTS"); MDTrace.WriteLine(LogLevel.DEBUG,"UPDATEFUNDAMENTALS"); 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,"MGSHRUNBACKTEST /USEHEDGING: /HEDGEINITIALCASH: /USESTOPLIMITS: /KEEPSLOTPOSITIONS: /STARTDATE: /MAXPOSITIONS: /INITIALCASH: /HOLDINGPERIOD: /{ENDDATE}: /SESSIONFILE: "); MDTrace.WriteLine(LogLevel.DEBUG,"MGSHRUNDAILY /SESSIONFILE: /TRADEDATE:"); @@ -134,6 +134,16 @@ namespace MarketData.Services // ********************************************************************************************************************************************************** public async Task TaskCalcSticker(CommandArgs commandArgs) { + int WAIT_TIME = 60000; // 1 minute intervals + if(commandArgs.Has("WAITFORCOMPLETION")) + { + List processArguments = Utility.ToList(commandArgs.Get("WAITFORCOMPLETION"),','); + while(Utility.IsProcessRunning("mk",processArguments)) + { + MDTrace.WriteLine(LogLevel.DEBUG,$"CALCSTICKER is waiting for items in the process completion list {commandArgs.Get("WAITFORCOMPLETION")}"); + try{Thread.Sleep(WAIT_TIME);}catch(Exception){;} + } + } CalcSticker(); await Task.FromResult(true); } diff --git a/MarketData/MarketDataLib/Extensions/ProcessExtensions.cs b/MarketData/MarketDataLib/Extensions/ProcessExtensions.cs new file mode 100644 index 0000000..209f51c --- /dev/null +++ b/MarketData/MarketDataLib/Extensions/ProcessExtensions.cs @@ -0,0 +1,16 @@ +using System.Diagnostics; + +namespace MarketData.Extensions +{ + public static class ProcessExtensions + { + public static List GetUnixCommandArguments(this Process process) + { + List commandArguments = new List(); + String commandFile = $"/proc/{ process.Id }/cmdline"; + if(!File.Exists(commandFile))return commandArguments; + String commandLine = File.ReadAllText(commandFile); + return commandLine.Split('\0').ToList(); + } + } +} \ No newline at end of file diff --git a/MarketData/MarketDataLib/Utility/Utility.cs b/MarketData/MarketDataLib/Utility/Utility.cs index 1b49fca..f2a236d 100755 --- a/MarketData/MarketDataLib/Utility/Utility.cs +++ b/MarketData/MarketDataLib/Utility/Utility.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using MarketData.MarketDataModel; using System.Security.Principal; using ThreadState=System.Threading.ThreadState; +using MarketData.Extensions; namespace MarketData.Utils { @@ -13,6 +14,18 @@ namespace MarketData.Utils private static DateTime epoch = DateTime.Parse("01-01-0001"); private static TimeSpan oneDay=new TimeSpan(1,0,0,0); + public static bool IsProcessRunning(String processName, List commandArgs) + { + List processList = Process.GetProcessesByName(processName).ToList(); + if(0==processList.Count)return false; + foreach(Process process in processList) + { + List processCommandArguments = process.GetUnixCommandArguments(); + List 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) { diff --git a/README.md b/README.md index b33c052..0156305 100644 --- a/README.md +++ b/README.md @@ -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 UPDATEFUNDAMENTALS > /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 \ No newline at end of file +0 0 18 * * cd $CRON_DIR ; /opt/MarketData/MarketData/mk CALCSTICKER /WAITFORCOMPLETION:UPDATEFINANCIALSTATEMENTS,UPDATEFUNDAMENTALS,UPDATEHISTORICAL > /dev/null 2>&1