Add ability for calcsticker to wait on depedencies
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
16
MarketData/MarketDataLib/Extensions/ProcessExtensions.cs
Normal file
16
MarketData/MarketDataLib/Extensions/ProcessExtensions.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user