Browse Source

make the ability to run multiple experiments in a row without needing human input

tristangurtler 3 years ago
parent
commit
2b09bfa6d5
3 changed files with 43 additions and 1 deletions
  1. 5 1
      prsona/Makefile
  2. 1 0
      prsona/cfg/queue.cfg
  3. 37 0
      prsona/src/experimentQueueMain.cpp

+ 5 - 1
prsona/Makefile

@@ -38,13 +38,14 @@ CC = gcc
 CFLAGS = -std=c99 -O3 -fomit-frame-pointer -I$(666_INC_PATH) -I$(MG_INC_PATH)
 C_LDFLAGS = -lm
 
-all : localTest server client orchestrator
+all : localTest server client orchestrator queue
 
 localTest: $(PRSONA_BIN_PATH) $(PRSONA_OBJ_PATH) $(BGN_OBJ_PATH) $(666_OBJ_PATH) $(PRSONA_BIN_PATH)/localTest
 
 server: $(PRSONA_BIN_PATH) $(PRSONA_OBJ_PATH) $(BGN_OBJ_PATH) $(666_OBJ_PATH) $(PRSONA_TMP_PATH) $(PRSONA_BIN_PATH)/server
 client: $(PRSONA_BIN_PATH) $(PRSONA_OBJ_PATH) $(BGN_OBJ_PATH) $(666_OBJ_PATH) $(PRSONA_TMP_PATH) $(PRSONA_BIN_PATH)/client
 orchestrator: $(PRSONA_BIN_PATH) $(PRSONA_OBJ_PATH) $(BGN_OBJ_PATH) $(666_OBJ_PATH) $(PRSONA_TMP_PATH) $(PRSONA_BIN_PATH)/orchestrator
+queue: $(PRSONA_BIN_PATH) $(PRSONA_BIN_PATH)/queue
 
 $(PRSONA_TMP_PATH):
 	mkdir -p $@
@@ -119,6 +120,9 @@ $(PRSONA_BIN_PATH)/client: $(PRSONA_OBJ_PATH)/clientMain.o $(PRSONA_OBJ) $(PRSON
 $(PRSONA_BIN_PATH)/orchestrator: $(PRSONA_OBJ_PATH)/orchestratorMain.o $(PRSONA_OBJ) $(PRSONA_SHARED_NETWORK_OBJ) $(PRSONA_ORCHESTRATOR_NETWORK_OBJ) $(MG_OBJ) $(BGN_OBJ_PATH)/bgn.a
 	$(CPP) $(CPPFLAGS) -no-pie -o $@ $^ $(LDFLAGS) $(NETWORK_LDFLAGS)
 
+$(PRSONA_BIN_PATH)/queue: $(PRSONA_SRC_PATH)/experimentQueueMain.cpp
+	$(CPP) $(CPPFLAGS) -o $@ $^
+
 .PHONY: clean
 
 clean: prsona_clean bgn_clean 666_clean mg_clean

+ 1 - 0
prsona/cfg/queue.cfg

@@ -0,0 +1 @@
+default 64 T

+ 37 - 0
prsona/src/experimentQueueMain.cpp

@@ -0,0 +1,37 @@
+/**
+ * experimentQueueMain.cpp
+ *      - compiles to bin/queue
+ *      - runs through a set of controls to run the orchestrator with multiple settings over time
+ *
+ * Stan Gurtler
+ */
+
+#include <iostream>
+#include <fstream>
+#include <cstring>
+#include <cstdlib>
+
+int main(int argc, char* argv[])
+{
+    const char *ORCHESTRATOR = "bin/orchestrator ";
+    const int ORCHESTRATOR_LEN = strlen(ORCHESTRATOR);
+    const int INPUT_BUFFER_LEN = 133;
+    const int OUTPUT_BUFFER_LEN = ORCHESTRATOR_LEN + INPUT_BUFFER_LEN;
+
+    char inputBuffer[INPUT_BUFFER_LEN], outputBuffer[OUTPUT_BUFFER_LEN];
+    std::ifstream configFile("cfg/queue.cfg");
+    while (!configFile.eof())
+    {
+        configFile.getline(inputBuffer, INPUT_BUFFER_LEN);
+        if (strlen(inputBuffer) > 0)
+        {
+            strncpy(outputBuffer, ORCHESTRATOR, ORCHESTRATOR_LEN);
+            strncpy(outputBuffer + ORCHESTRATOR_LEN, inputBuffer, INPUT_BUFFER_LEN);
+            outputBuffer[OUTPUT_BUFFER_LEN] = 0;
+            
+            int sysOut = system(outputBuffer);
+        }
+    }
+
+    return 0;
+}