├── containers ├── __init__.py ├── master │ ├── __init__.py │ ├── sources │ │ ├── __init__.py │ │ ├── utils │ │ │ ├── master │ │ │ │ ├── registry │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── tools │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── roles │ │ │ │ │ │ ├── tools │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── generateTokenList.py │ │ │ │ │ │ ├── master.py │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── types │ │ │ │ │ │ ├── schedulingResult.py │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── taskWithChildren.py │ │ │ │ │ ├── idManager │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── base.py │ │ │ │ │ └── registered │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── users.py │ │ │ │ │ │ └── masters.py │ │ │ │ ├── application │ │ │ │ │ ├── task │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── dependency │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── base.py │ │ │ │ │ │ └── base.py │ │ │ │ │ ├── database │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── oracle │ │ │ │ │ │ │ └── instantclient_21_1 │ │ │ │ │ │ │ │ ├── .ignore │ │ │ │ │ │ │ │ └── .gitignore │ │ │ │ │ │ └── base.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── scheduler │ │ │ │ │ ├── policies │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── nsga │ │ │ │ │ │ │ ├── scaler │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ │ │ ├── selections │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ │ │ ├── tools │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ │ │ ├── geneticProblem │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── termination │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── baseScaler │ │ │ │ │ │ ├── policies │ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── types │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── estimator │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── tools │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── assessResourceScore.py │ │ │ │ │ │ └── genMachineIDForTaskHandler.py │ │ │ │ ├── profiler │ │ │ │ │ └── __init__.py │ │ │ │ ├── config │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── mysqlEnvironment.py │ │ │ │ ├── resourcesDiscovery │ │ │ │ │ └── __init__.py │ │ │ │ ├── logger │ │ │ │ │ ├── database │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── __init__.py │ │ │ │ └── messageHandler │ │ │ │ │ ├── tools │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── waitMessage.py │ │ │ │ │ ├── logHandler.py │ │ │ │ │ └── __init__.py │ │ │ ├── types │ │ │ │ ├── exceptions │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── connection.py │ │ │ │ │ └── message.py │ │ │ │ ├── basic │ │ │ │ │ ├── address.py │ │ │ │ │ ├── periodicTask.py │ │ │ │ │ ├── serializableList.py │ │ │ │ │ ├── serializableDictionary.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── pairsMedian.py │ │ │ │ │ └── autoDictionary.py │ │ │ │ ├── hostProfiles │ │ │ │ │ ├── images.py │ │ │ │ │ ├── runningContainres.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── decorator │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── loopSourceDestination.py │ │ │ │ ├── component │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── role.py │ │ │ │ └── message │ │ │ │ │ ├── subSubType.py │ │ │ │ │ └── type.py │ │ │ ├── config │ │ │ │ ├── base.py │ │ │ │ ├── __init__.py │ │ │ │ ├── configActor.py │ │ │ │ ├── configUser.py │ │ │ │ ├── configMaster.py │ │ │ │ ├── taskExecutor.py │ │ │ │ └── configRemoteLogger.py │ │ │ ├── container │ │ │ │ └── __init__.py │ │ │ ├── debugLogPrinter │ │ │ │ └── __init__.py │ │ │ ├── tools │ │ │ │ ├── terminate.py │ │ │ │ ├── encrypt.py │ │ │ │ ├── filterIllegalCharacter.py │ │ │ │ ├── camelToSnake.py │ │ │ │ ├── snakeToCamel.py │ │ │ │ ├── __init__.py │ │ │ │ └── decrypt.py │ │ │ ├── connection │ │ │ │ ├── message │ │ │ │ │ └── __init__.py │ │ │ │ ├── handlerReturn.py │ │ │ │ ├── __init__.py │ │ │ │ └── request.py │ │ │ ├── component │ │ │ │ └── __init__.py │ │ │ └── resourceDiscovery │ │ │ │ ├── discovered │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── manager.py │ │ │ │ ├── actors.py │ │ │ │ ├── masters.py │ │ │ │ └── remoteLoggers.py │ │ │ │ └── __init__.py │ │ ├── .mysql.env │ │ ├── .env │ │ └── requirements.txt │ └── docker-compose.yml ├── user │ ├── sources │ │ ├── log │ │ │ └── .gitkeep │ │ ├── utils │ │ │ ├── types │ │ │ │ ├── exceptions │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── connection.py │ │ │ │ │ └── message.py │ │ │ │ ├── hostProfiles │ │ │ │ │ ├── images.py │ │ │ │ │ ├── runningContainres.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── basic │ │ │ │ │ ├── address.py │ │ │ │ │ ├── periodicTask.py │ │ │ │ │ ├── serializableList.py │ │ │ │ │ ├── serializableDictionary.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── pairsMedian.py │ │ │ │ │ └── autoDictionary.py │ │ │ │ ├── decorator │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── loopSourceDestination.py │ │ │ │ ├── component │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── role.py │ │ │ │ └── message │ │ │ │ │ ├── subSubType.py │ │ │ │ │ └── type.py │ │ │ ├── config │ │ │ │ ├── base.py │ │ │ │ ├── __init__.py │ │ │ │ ├── configActor.py │ │ │ │ ├── configMaster.py │ │ │ │ ├── configUser.py │ │ │ │ ├── taskExecutor.py │ │ │ │ └── configRemoteLogger.py │ │ │ ├── container │ │ │ │ └── __init__.py │ │ │ ├── user │ │ │ │ ├── window │ │ │ │ │ └── __init__.py │ │ │ │ ├── tools │ │ │ │ │ └── __init__.py │ │ │ │ ├── messageHandler │ │ │ │ │ └── __init__.py │ │ │ │ ├── registration │ │ │ │ │ └── __init__.py │ │ │ │ ├── applications │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── debugLogPrinter │ │ │ │ └── __init__.py │ │ │ ├── tools │ │ │ │ ├── terminate.py │ │ │ │ ├── encrypt.py │ │ │ │ ├── filterIllegalCharacter.py │ │ │ │ ├── camelToSnake.py │ │ │ │ ├── snakeToCamel.py │ │ │ │ ├── __init__.py │ │ │ │ └── decrypt.py │ │ │ ├── connection │ │ │ │ ├── message │ │ │ │ │ └── __init__.py │ │ │ │ ├── handlerReturn.py │ │ │ │ ├── __init__.py │ │ │ │ └── request.py │ │ │ ├── component │ │ │ │ └── __init__.py │ │ │ └── resourceDiscovery │ │ │ │ ├── discovered │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── manager.py │ │ │ │ ├── actors.py │ │ │ │ └── masters.py │ │ │ │ └── __init__.py │ │ ├── requirementsDockerImage.txt │ │ ├── .env │ │ └── requirements.txt │ └── docker-compose.yml ├── database │ └── mariadb │ │ ├── mysql │ │ └── .gitkeep │ │ ├── .gitignore │ │ ├── tools │ │ └── __init__.py │ │ ├── .env │ │ ├── .env.example │ │ └── docker-compose.yml ├── taskExecutor │ ├── dockerFiles │ │ ├── .gitkeep │ │ ├── rebuild.sh │ │ ├── OCR │ │ │ └── docker-compose.yml │ │ ├── GameOfLife0 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife1 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife2 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife3 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife4 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife5 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife6 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife7 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife8 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife9 │ │ │ └── docker-compose.yml │ │ ├── NaiveFormula0 │ │ │ └── docker-compose.yml │ │ ├── NaiveFormula1 │ │ │ └── docker-compose.yml │ │ ├── NaiveFormula2 │ │ │ └── docker-compose.yml │ │ ├── NaiveFormula3 │ │ │ └── docker-compose.yml │ │ ├── EyeDetection │ │ │ └── docker-compose.yml │ │ ├── GameOfLife10 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife11 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife12 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife13 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife14 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife15 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife16 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife17 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife18 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife19 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife20 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife21 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife22 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife23 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife24 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife25 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife26 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife27 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife28 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife29 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife30 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife31 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife32 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife33 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife34 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife35 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife36 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife37 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife38 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife39 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife40 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife41 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife42 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife43 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife44 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife45 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife46 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife47 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife48 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife49 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife50 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife51 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife52 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife53 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife54 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife55 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife56 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife57 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife58 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife59 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife60 │ │ │ └── docker-compose.yml │ │ ├── GameOfLife61 │ │ │ └── docker-compose.yml │ │ ├── BlurAndPHash │ │ │ └── docker-compose.yml │ │ ├── ColorTracking │ │ │ └── docker-compose.yml │ │ └── FaceDetection │ │ │ └── docker-compose.yml │ └── sources │ │ ├── utils │ │ ├── types │ │ │ ├── exceptions │ │ │ │ ├── __init__.py │ │ │ │ ├── connection.py │ │ │ │ └── message.py │ │ │ ├── hostProfiles │ │ │ │ ├── images.py │ │ │ │ ├── runningContainres.py │ │ │ │ └── __init__.py │ │ │ ├── basic │ │ │ │ ├── address.py │ │ │ │ ├── periodicTask.py │ │ │ │ ├── serializableList.py │ │ │ │ ├── serializableDictionary.py │ │ │ │ ├── __init__.py │ │ │ │ ├── pairsMedian.py │ │ │ │ └── autoDictionary.py │ │ │ ├── decorator │ │ │ │ ├── __init__.py │ │ │ │ └── loopSourceDestination.py │ │ │ ├── component │ │ │ │ ├── __init__.py │ │ │ │ └── role.py │ │ │ └── message │ │ │ │ ├── subSubType.py │ │ │ │ └── type.py │ │ ├── config │ │ │ ├── base.py │ │ │ ├── __init__.py │ │ │ ├── configActor.py │ │ │ ├── configUser.py │ │ │ ├── configMaster.py │ │ │ ├── taskExecutor.py │ │ │ └── configRemoteLogger.py │ │ ├── container │ │ │ └── __init__.py │ │ ├── debugLogPrinter │ │ │ └── __init__.py │ │ ├── taskExecutor │ │ │ ├── tools │ │ │ │ └── __init__.py │ │ │ ├── profiler │ │ │ │ └── __init__.py │ │ │ ├── registration │ │ │ │ └── __init__.py │ │ │ ├── messageHandler │ │ │ │ └── __init__.py │ │ │ ├── __init__.py │ │ │ └── tasks │ │ │ │ ├── gameOfLife0.py │ │ │ │ ├── gameOfLife1.py │ │ │ │ ├── gameOfLife2.py │ │ │ │ ├── gameOfLife3.py │ │ │ │ ├── gameOfLife4.py │ │ │ │ ├── gameOfLife48.py │ │ │ │ ├── gameOfLife5.py │ │ │ │ ├── gameOfLife56.py │ │ │ │ ├── gameOfLife57.py │ │ │ │ ├── gameOfLife6.py │ │ │ │ ├── gameOfLife7.py │ │ │ │ ├── gameOfLife8.py │ │ │ │ ├── gameOfLife9.py │ │ │ │ ├── testTask.py │ │ │ │ ├── gameOfLife10.py │ │ │ │ ├── gameOfLife11.py │ │ │ │ ├── gameOfLife12.py │ │ │ │ ├── gameOfLife13.py │ │ │ │ ├── gameOfLife14.py │ │ │ │ ├── gameOfLife15.py │ │ │ │ ├── gameOfLife16.py │ │ │ │ ├── gameOfLife17.py │ │ │ │ ├── gameOfLife18.py │ │ │ │ ├── gameOfLife19.py │ │ │ │ ├── gameOfLife20.py │ │ │ │ ├── gameOfLife21.py │ │ │ │ ├── gameOfLife22.py │ │ │ │ ├── gameOfLife23.py │ │ │ │ ├── gameOfLife24.py │ │ │ │ ├── gameOfLife25.py │ │ │ │ ├── gameOfLife26.py │ │ │ │ ├── gameOfLife27.py │ │ │ │ ├── gameOfLife28.py │ │ │ │ ├── gameOfLife29.py │ │ │ │ ├── gameOfLife30.py │ │ │ │ ├── gameOfLife31.py │ │ │ │ ├── gameOfLife32.py │ │ │ │ ├── gameOfLife33.py │ │ │ │ ├── gameOfLife34.py │ │ │ │ ├── gameOfLife35.py │ │ │ │ ├── gameOfLife36.py │ │ │ │ ├── gameOfLife37.py │ │ │ │ ├── gameOfLife38.py │ │ │ │ ├── gameOfLife39.py │ │ │ │ ├── gameOfLife40.py │ │ │ │ ├── gameOfLife41.py │ │ │ │ ├── gameOfLife42.py │ │ │ │ ├── gameOfLife43.py │ │ │ │ ├── gameOfLife44.py │ │ │ │ ├── gameOfLife45.py │ │ │ │ ├── gameOfLife46.py │ │ │ │ ├── gameOfLife47.py │ │ │ │ ├── gameOfLife49.py │ │ │ │ ├── gameOfLife50.py │ │ │ │ ├── gameOfLife51.py │ │ │ │ ├── gameOfLife52.py │ │ │ │ ├── gameOfLife53.py │ │ │ │ ├── gameOfLife54.py │ │ │ │ ├── gameOfLife55.py │ │ │ │ ├── gameOfLife58.py │ │ │ │ ├── gameOfLife59.py │ │ │ │ ├── gameOfLife60.py │ │ │ │ ├── gameOfLife61.py │ │ │ │ ├── kineticEnergy3.py │ │ │ │ ├── kineticEnergy0.py │ │ │ │ ├── kineticEnergy1.py │ │ │ │ ├── naiveFormula2.py │ │ │ │ ├── naiveFormula0.py │ │ │ │ └── naiveFormula1.py │ │ ├── tools │ │ │ ├── terminate.py │ │ │ ├── encrypt.py │ │ │ ├── filterIllegalCharacter.py │ │ │ ├── camelToSnake.py │ │ │ ├── snakeToCamel.py │ │ │ ├── __init__.py │ │ │ └── decrypt.py │ │ ├── connection │ │ │ ├── message │ │ │ │ └── __init__.py │ │ │ ├── handlerReturn.py │ │ │ ├── __init__.py │ │ │ └── request.py │ │ ├── component │ │ │ └── __init__.py │ │ └── resourceDiscovery │ │ │ ├── discovered │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── manager.py │ │ │ ├── actors.py │ │ │ └── masters.py │ │ │ └── __init__.py │ │ ├── .env │ │ └── requirements.txt ├── actor │ ├── sources │ │ ├── utils │ │ │ ├── types │ │ │ │ ├── exceptions │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── connection.py │ │ │ │ │ └── message.py │ │ │ │ ├── hostProfiles │ │ │ │ │ ├── images.py │ │ │ │ │ ├── runningContainres.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── basic │ │ │ │ │ ├── address.py │ │ │ │ │ ├── periodicTask.py │ │ │ │ │ ├── serializableList.py │ │ │ │ │ ├── serializableDictionary.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── pairsMedian.py │ │ │ │ │ └── autoDictionary.py │ │ │ │ ├── decorator │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── loopSourceDestination.py │ │ │ │ ├── component │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── role.py │ │ │ │ └── message │ │ │ │ │ ├── subSubType.py │ │ │ │ │ └── type.py │ │ │ ├── config │ │ │ │ ├── base.py │ │ │ │ ├── __init__.py │ │ │ │ ├── configActor.py │ │ │ │ ├── configMaster.py │ │ │ │ ├── configUser.py │ │ │ │ ├── taskExecutor.py │ │ │ │ └── configRemoteLogger.py │ │ │ ├── container │ │ │ │ └── __init__.py │ │ │ ├── debugLogPrinter │ │ │ │ └── __init__.py │ │ │ ├── actor │ │ │ │ ├── messageHandler │ │ │ │ │ └── __init__.py │ │ │ │ ├── profiler │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── actor.py │ │ │ │ ├── initiator │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── base.py │ │ │ │ └── __init__.py │ │ │ ├── tools │ │ │ │ ├── terminate.py │ │ │ │ ├── encrypt.py │ │ │ │ ├── filterIllegalCharacter.py │ │ │ │ ├── camelToSnake.py │ │ │ │ ├── snakeToCamel.py │ │ │ │ ├── __init__.py │ │ │ │ └── decrypt.py │ │ │ ├── connection │ │ │ │ ├── message │ │ │ │ │ └── __init__.py │ │ │ │ ├── handlerReturn.py │ │ │ │ ├── __init__.py │ │ │ │ └── request.py │ │ │ ├── component │ │ │ │ └── __init__.py │ │ │ └── resourceDiscovery │ │ │ │ ├── discovered │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── manager.py │ │ │ │ ├── actors.py │ │ │ │ ├── masters.py │ │ │ │ └── remoteLoggers.py │ │ │ │ └── __init__.py │ │ ├── .env │ │ └── requirements.txt │ └── docker-compose.yml ├── remoteLogger │ ├── sources │ │ ├── utils │ │ │ ├── types │ │ │ │ ├── exceptions │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── connection.py │ │ │ │ │ └── message.py │ │ │ │ ├── hostProfiles │ │ │ │ │ ├── images.py │ │ │ │ │ ├── runningContainres.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── basic │ │ │ │ │ ├── address.py │ │ │ │ │ ├── periodicTask.py │ │ │ │ │ ├── serializableList.py │ │ │ │ │ ├── serializableDictionary.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── pairsMedian.py │ │ │ │ │ └── autoDictionary.py │ │ │ │ ├── decorator │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── loopSourceDestination.py │ │ │ │ ├── component │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── role.py │ │ │ │ └── message │ │ │ │ │ ├── subSubType.py │ │ │ │ │ └── type.py │ │ │ ├── config │ │ │ │ ├── base.py │ │ │ │ ├── __init__.py │ │ │ │ ├── configActor.py │ │ │ │ ├── configUser.py │ │ │ │ ├── configMaster.py │ │ │ │ ├── taskExecutor.py │ │ │ │ └── configRemoteLogger.py │ │ │ ├── container │ │ │ │ └── __init__.py │ │ │ ├── debugLogPrinter │ │ │ │ └── __init__.py │ │ │ ├── remoteLogger │ │ │ │ ├── config │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── mysqlEnvironment.py │ │ │ │ ├── logger │ │ │ │ │ ├── database │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ │ ├── tools │ │ │ │ ├── terminate.py │ │ │ │ ├── encrypt.py │ │ │ │ ├── filterIllegalCharacter.py │ │ │ │ ├── camelToSnake.py │ │ │ │ ├── snakeToCamel.py │ │ │ │ ├── __init__.py │ │ │ │ └── decrypt.py │ │ │ ├── connection │ │ │ │ ├── message │ │ │ │ │ └── __init__.py │ │ │ │ ├── handlerReturn.py │ │ │ │ ├── __init__.py │ │ │ │ └── request.py │ │ │ ├── component │ │ │ │ └── __init__.py │ │ │ └── resourceDiscovery │ │ │ │ ├── discovered │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── manager.py │ │ │ │ ├── actors.py │ │ │ │ └── masters.py │ │ │ │ └── __init__.py │ │ ├── .mysql.env │ │ ├── .env │ │ └── requirements.txt │ └── docker-compose.yml ├── rebuild.sh └── stopContainer.sh ├── output ├── wireguardConfg │ └── .gitkeep └── .gitignore ├── config ├── network.env └── host │ └── hostIP.csv ├── demo └── utils │ ├── tools │ ├── __init__.py │ └── runCommand.py │ ├── componentRunner │ ├── actor.py │ ├── master.py │ ├── __init__.py │ └── remoteLogger.py │ ├── imageBuilder │ ├── actor.py │ ├── user.py │ ├── master.py │ ├── remoteLogger.py │ ├── __init__.py │ └── camelToSnake.py │ └── __init__.py ├── hosts ├── images └── HighLevelAbstractDiagram.png ├── .gitignore ├── scripts ├── camelToSnake.py └── snakeToCamel.py ├── prepareEnv.sh ├── env.sh ├── rebuild.sh └── upload.sh /containers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /output/wireguardConfg/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/user/sources/log/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /output/.gitignore: -------------------------------------------------------------------------------- 1 | wireguardConfg 2 | -------------------------------------------------------------------------------- /containers/database/mariadb/mysql/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /config/network.env: -------------------------------------------------------------------------------- 1 | WG_NET=192.0.0.0/24 2 | WG_PORT=4999 3 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/database/mariadb/.gitignore: -------------------------------------------------------------------------------- 1 | mysql/ 2 | sqlFiles/*.sql 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/task/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/database/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /demo/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .debugLogger import newDebugLogger 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/base.py: -------------------------------------------------------------------------------- 1 | class Config: 2 | pass 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/base.py: -------------------------------------------------------------------------------- 1 | class Config: 2 | pass 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/task/dependency/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/base.py: -------------------------------------------------------------------------------- 1 | class Config: 2 | pass 3 | -------------------------------------------------------------------------------- /demo/utils/tools/runCommand.py: -------------------------------------------------------------------------------- 1 | def runCommand(command: str): 2 | pass 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/baseScaler/policies/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/scaler/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/base.py: -------------------------------------------------------------------------------- 1 | class Config: 2 | pass 3 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/base.py: -------------------------------------------------------------------------------- 1 | class Config: 2 | pass 3 | -------------------------------------------------------------------------------- /containers/database/mariadb/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .debugLogger import newDebugLogger -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/selections/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/database/oracle/instantclient_21_1/.ignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /containers/user/sources/utils/container/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import ContainerManager 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/window/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import WindowManager 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/container/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import ContainerManager 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/debugLogPrinter/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import DebugLogPrinter 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/container/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import ContainerManager 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/debugLogPrinter/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import DebugLogPrinter 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/profiler/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import MasterProfiler 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/debugLogPrinter/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import DebugLogPrinter 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .initActuator import initActuator 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/baseScaler/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import Scaler 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/types/__init__.py: -------------------------------------------------------------------------------- 1 | from .decision import Decision 2 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/container/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import ContainerManager 2 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/debugLogPrinter/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import DebugLogPrinter 2 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/container/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import ContainerManager 2 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/debugLogPrinter/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import DebugLogPrinter 2 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .initTask import initTask 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/messageHandler/__init__.py: -------------------------------------------------------------------------------- 1 | from .handler import ActorMessageHandler 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/database/oracle/instantclient_21_1/.gitignore: -------------------------------------------------------------------------------- 1 | ./* 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .mysqlEnvironment import MySQLEnvironment 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/estimator/__init__.py: -------------------------------------------------------------------------------- 1 | from .estimator import Estimator 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/messageHandler/__init__.py: -------------------------------------------------------------------------------- 1 | from .handler import UserMessageHandler 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/registration/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import RegistrationManager 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/hostProfiles/images.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | Images = Set[str] 4 | -------------------------------------------------------------------------------- /containers/master/sources/.mysql.env: -------------------------------------------------------------------------------- 1 | HOST=127.0.0.1 2 | PORT=3306 3 | USER=root 4 | PASSWORD=passwordForRoot 5 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .prettyDecision import prettyDecision 2 | -------------------------------------------------------------------------------- /containers/user/sources/requirementsDockerImage.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | psutil 3 | python-dotenv 4 | six 5 | docker 6 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/terminate.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def terminate(): 5 | os._exit(0) 6 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/hostProfiles/images.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | Images = Set[str] 4 | -------------------------------------------------------------------------------- /hosts: -------------------------------------------------------------------------------- 1 | nectar1-amd 2 | nectar2-amd 3 | oracle1-ampere 4 | oracle2-ampere 5 | oracle3-intel 6 | oracle4-intel 7 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/terminate.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def terminate(): 5 | os._exit(0) 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/address.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | Address = Tuple[str, int] 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/resourcesDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import MasterResourcesDiscovery 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/terminate.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def terminate(): 5 | os._exit(0) 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/address.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | Address = Tuple[str, int] 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/hostProfiles/images.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | Images = Set[str] 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/profiler/__init__.py: -------------------------------------------------------------------------------- 1 | from .resources import ResourcesProfiler 2 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/address.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | Address = Tuple[str, int] 4 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/remoteLogger/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .mysqlEnvironment import MySQLEnvironment 2 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/terminate.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def terminate(): 5 | os._exit(0) 6 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/hostProfiles/images.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | Images = Set[str] 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/registration/__init__.py: -------------------------------------------------------------------------------- 1 | from .manager import RegistrationManager 2 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/terminate.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def terminate(): 5 | os._exit(0) 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/hostProfiles/images.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | Images = Set[str] 4 | -------------------------------------------------------------------------------- /images/HighLevelAbstractDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cloudslab/FogBus2/HEAD/images/HighLevelAbstractDiagram.png -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/roles/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .generateTokenList import generateTokenList 2 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/address.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | Address = Tuple[str, int] 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/address.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | Address = Tuple[str, int] 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .randomPopulation import randomPopulation 2 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/messageHandler/__init__.py: -------------------------------------------------------------------------------- 1 | from .handler import TaskExecutorMessageHandler 2 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/hostProfiles/runningContainres.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | RunningContainers = Set[str] 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/geneticProblem/__init__.py: -------------------------------------------------------------------------------- 1 | from .geneticProblem import GeneticProblem 2 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/hostProfiles/runningContainres.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | RunningContainers = Set[str] 4 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/hostProfiles/runningContainres.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | RunningContainers = Set[str] 4 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/connection/message/__init__.py: -------------------------------------------------------------------------------- 1 | from .received import MessageReceived 2 | from .toSend import MessageToSend 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/connection/message/__init__.py: -------------------------------------------------------------------------------- 1 | from .received import MessageReceived 2 | from .toSend import MessageToSend 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import Application 2 | from .manager import ApplicationManager 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/logger/database/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import BaseDatabase 2 | from .mysqlDB import MySQLDatabase 3 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/hostProfiles/runningContainres.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | RunningContainers = Set[str] 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/hostProfiles/runningContainres.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | RunningContainers = Set[str] 4 | -------------------------------------------------------------------------------- /containers/user/sources/utils/connection/message/__init__.py: -------------------------------------------------------------------------------- 1 | from .received import MessageReceived 2 | from .toSend import MessageToSend 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/types/schedulingResult.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | SchedulingResult = Tuple[bool, str] 4 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/connection/message/__init__.py: -------------------------------------------------------------------------------- 1 | from .received import MessageReceived 2 | from .toSend import MessageToSend 3 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/connection/message/__init__.py: -------------------------------------------------------------------------------- 1 | from .received import MessageReceived 2 | from .toSend import MessageToSend 3 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/.mysql.env: -------------------------------------------------------------------------------- 1 | HOST1=docker.for.mac.localhost 2 | HOST=127.0.0.1 3 | PORT=3306 4 | USER=root 5 | PASSWORD=passwordForRoot 6 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/remoteLogger/logger/database/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import BaseDatabase 2 | from .mysqlDB import MySQLDatabase 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/messageHandler/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .terminateMessage import terminateMessage 2 | from .waitMessage import waitMessage 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/roles/master.py: -------------------------------------------------------------------------------- 1 | from ....types.component import Component 2 | 3 | 4 | class Master(Component): 5 | pass 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/__init__.py: -------------------------------------------------------------------------------- 1 | from .nsga2 import NSGA2 2 | from .nsga3 import NSGA3 3 | from .ohnsga import OHNSGA 4 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/encrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import dumps 2 | 3 | 4 | def encrypt(obj) -> bytes: 5 | data = dumps(obj, 0) 6 | return data 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/encrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import dumps 2 | 3 | 4 | def encrypt(obj) -> bytes: 5 | data = dumps(obj, 0) 6 | return data 7 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/encrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import dumps 2 | 3 | 4 | def encrypt(obj) -> bytes: 5 | data = dumps(obj, 0) 6 | return data 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/encrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import dumps 2 | 3 | 4 | def encrypt(obj) -> bytes: 5 | data = dumps(obj, 0) 6 | return data 7 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/encrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import dumps 2 | 3 | 4 | def encrypt(obj) -> bytes: 5 | data = dumps(obj, 0) 6 | return data 7 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/profiler/__init__.py: -------------------------------------------------------------------------------- 1 | from .actor import ActorProfiler 2 | from .images import ImagesProfiler 3 | from .resources import ResourcesProfiler 4 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/connection/handlerReturn.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .message import MessageToSend 4 | 5 | HandlerReturn = Union[None, MessageToSend] 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/decorator/__init__.py: -------------------------------------------------------------------------------- 1 | from .loopSourceDestination import LoopSourceDestination 2 | from .synchronizedAttribute import SynchronizedAttribute 3 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/decorator/__init__.py: -------------------------------------------------------------------------------- 1 | from .loopSourceDestination import LoopSourceDestination 2 | from .synchronizedAttribute import SynchronizedAttribute 3 | -------------------------------------------------------------------------------- /containers/user/sources/utils/connection/handlerReturn.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .message import MessageToSend 4 | 5 | HandlerReturn = Union[None, MessageToSend] 6 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/decorator/__init__.py: -------------------------------------------------------------------------------- 1 | from .loopSourceDestination import LoopSourceDestination 2 | from .synchronizedAttribute import SynchronizedAttribute 3 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .basic import BasicComponent 2 | from .communicator import Communicator 3 | from .periodicTaskRunner import PeriodicTaskRunner 4 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .identity import ComponentIdentity 2 | from .identitySerializable import Component 3 | from .role import ComponentRole 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/connection/handlerReturn.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .message import MessageToSend 4 | 5 | HandlerReturn = Union[None, MessageToSend] 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/types/__init__.py: -------------------------------------------------------------------------------- 1 | from .task import Task 2 | from .taskLabeled import TaskLabeled 3 | from .taskWithChildren import TaskWithChildren 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .identity import ComponentIdentity 2 | from .identitySerializable import Component 3 | from .role import ComponentRole 4 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/decorator/__init__.py: -------------------------------------------------------------------------------- 1 | from .loopSourceDestination import LoopSourceDestination 2 | from .synchronizedAttribute import SynchronizedAttribute 3 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/decorator/__init__.py: -------------------------------------------------------------------------------- 1 | from .loopSourceDestination import LoopSourceDestination 2 | from .synchronizedAttribute import SynchronizedAttribute 3 | -------------------------------------------------------------------------------- /containers/user/sources/utils/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .basic import BasicComponent 2 | from .communicator import Communicator 3 | from .periodicTaskRunner import PeriodicTaskRunner 4 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .identity import ComponentIdentity 2 | from .identitySerializable import Component 3 | from .role import ComponentRole 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .basic import BasicComponent 2 | from .communicator import Communicator 3 | from .periodicTaskRunner import PeriodicTaskRunner 4 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/connection/handlerReturn.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .message import MessageToSend 4 | 5 | HandlerReturn = Union[None, MessageToSend] 6 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .identity import ComponentIdentity 2 | from .identitySerializable import Component 3 | from .role import ComponentRole 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/connection/handlerReturn.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .message import MessageToSend 4 | 5 | HandlerReturn = Union[None, MessageToSend] 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .identity import ComponentIdentity 2 | from .identitySerializable import Component 3 | from .role import ComponentRole 4 | -------------------------------------------------------------------------------- /containers/database/mariadb/.env: -------------------------------------------------------------------------------- 1 | MYSQL_DIR=./mysql 2 | MYSQL_HOST=0.0.0.0 3 | MYSQL_ROOT_PASSWORD=passwordForRoot 4 | MYSQL_DATABASE=fogbus2 5 | MYSQL_USER=fogbus2 6 | MYSQL_PASSWORD=passwordForRoot -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/roles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actor import Actor 2 | from .master import Master 3 | from .taskExecutor import TaskExecutor 4 | from .user import User 5 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/__init__.py: -------------------------------------------------------------------------------- 1 | from .tools import assessResourceScore 2 | from .tools import genMachineIDForTaskHandler 3 | from .tools import initSchedulerByName 4 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .basic import BasicComponent 2 | from .communicator import Communicator 3 | from .periodicTaskRunner import PeriodicTaskRunner 4 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/component/__init__.py: -------------------------------------------------------------------------------- 1 | from .basic import BasicComponent 2 | from .communicator import Communicator 3 | from .periodicTaskRunner import PeriodicTaskRunner 4 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/policies/nsga/termination/__init__.py: -------------------------------------------------------------------------------- 1 | from .timeBasedSingleObjectiveDefaultTermination import \ 2 | TimeBasedSingleObjectiveDefaultTermination 3 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/exceptions/connection.py: -------------------------------------------------------------------------------- 1 | class CannotBindAddr(Exception): 2 | 3 | def __init__(self): 4 | super(CannotBindAddr, self).__init__('can not bind address') 5 | -------------------------------------------------------------------------------- /demo/utils/componentRunner/actor.py: -------------------------------------------------------------------------------- 1 | from .base import BaseRunner 2 | 3 | 4 | class ActorRunner(BaseRunner): 5 | def __init__(self): 6 | BaseRunner.__init__(self, componentName='actor') 7 | -------------------------------------------------------------------------------- /containers/actor/sources/.env: -------------------------------------------------------------------------------- 1 | REMOTE_LOGGER_PORT_RANGE=5000-5000 2 | MASTER_PORT_RANGE=5001-5010 3 | ACTOR_PORT_RANGE=50000-50100 4 | USER_PORT_RANGE=50101-50200 5 | TASK_EXECUTOR_PORT_RANGE=50201-60000 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/exceptions/connection.py: -------------------------------------------------------------------------------- 1 | class CannotBindAddr(Exception): 2 | 3 | def __init__(self): 4 | super(CannotBindAddr, self).__init__('can not bind address') 5 | -------------------------------------------------------------------------------- /containers/master/sources/.env: -------------------------------------------------------------------------------- 1 | REMOTE_LOGGER_PORT_RANGE=5000-5000 2 | MASTER_PORT_RANGE=5001-5010 3 | ACTOR_PORT_RANGE=50000-50100 4 | USER_PORT_RANGE=50101-50200 5 | TASK_EXECUTOR_PORT_RANGE=50201-60000 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/exceptions/connection.py: -------------------------------------------------------------------------------- 1 | class CannotBindAddr(Exception): 2 | 3 | def __init__(self): 4 | super(CannotBindAddr, self).__init__('can not bind address') 5 | -------------------------------------------------------------------------------- /containers/user/sources/.env: -------------------------------------------------------------------------------- 1 | REMOTE_LOGGER_PORT_RANGE=5000-5000 2 | MASTER_PORT_RANGE=5001-5010 3 | ACTOR_PORT_RANGE=50000-50100 4 | USER_PORT_RANGE=50101-50200 5 | TASK_EXECUTOR_PORT_RANGE=50201-60000 6 | -------------------------------------------------------------------------------- /demo/utils/componentRunner/master.py: -------------------------------------------------------------------------------- 1 | from .base import BaseRunner 2 | 3 | 4 | class MasterRunner(BaseRunner): 5 | def __init__(self): 6 | BaseRunner.__init__(self, componentName='master') 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/.env: -------------------------------------------------------------------------------- 1 | REMOTE_LOGGER_PORT_RANGE=5000-5000 2 | MASTER_PORT_RANGE=5001-5010 3 | ACTOR_PORT_RANGE=50000-50100 4 | USER_PORT_RANGE=50101-50200 5 | TASK_EXECUTOR_PORT_RANGE=50201-60000 6 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/exceptions/connection.py: -------------------------------------------------------------------------------- 1 | class CannotBindAddr(Exception): 2 | 3 | def __init__(self): 4 | super(CannotBindAddr, self).__init__('can not bind address') 5 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/rebuild.sh: -------------------------------------------------------------------------------- 1 | build() { 2 | cd $1 3 | docker-compose \ 4 | build 5 | cd ..} 6 | for d in */; do 7 | echo "[*] Building $d ..." 8 | build $d 9 | done 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/.env: -------------------------------------------------------------------------------- 1 | REMOTE_LOGGER_PORT_RANGE=5000-5000 2 | MASTER_PORT_RANGE=5001-5010 3 | ACTOR_PORT_RANGE=50000-50100 4 | USER_PORT_RANGE=50101-50200 5 | TASK_EXECUTOR_PORT_RANGE=50201-60000 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/exceptions/connection.py: -------------------------------------------------------------------------------- 1 | class CannotBindAddr(Exception): 2 | 3 | def __init__(self): 4 | super(CannotBindAddr, self).__init__('can not bind address') 5 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/filterIllegalCharacter.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def filterIllegalCharacter(string: str): 5 | filtered = re.sub(r'[^a-zA-Z0-9_.-]*', '', string) 6 | return filtered 7 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/filterIllegalCharacter.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def filterIllegalCharacter(string: str): 5 | filtered = re.sub(r'[^a-zA-Z0-9_.-]*', '', string) 6 | return filtered 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/filterIllegalCharacter.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def filterIllegalCharacter(string: str): 5 | filtered = re.sub(r'[^a-zA-Z0-9_.-]*', '', string) 6 | return filtered 7 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/actor.py: -------------------------------------------------------------------------------- 1 | from .base import ImageBuilder 2 | 3 | 4 | class ActorImageBuilder(ImageBuilder): 5 | 6 | def __init__(self): 7 | ImageBuilder.__init__(self, composeFilePath='actor') 8 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/user.py: -------------------------------------------------------------------------------- 1 | from .base import ImageBuilder 2 | 3 | 4 | class UserImageBuilder(ImageBuilder): 5 | 6 | def __init__(self): 7 | ImageBuilder.__init__(self, composeFilePath='user') 8 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/filterIllegalCharacter.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def filterIllegalCharacter(string: str): 5 | filtered = re.sub(r'[^a-zA-Z0-9_.-]*', '', string) 6 | return filtered 7 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/filterIllegalCharacter.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def filterIllegalCharacter(string: str): 5 | filtered = re.sub(r'[^a-zA-Z0-9_.-]*', '', string) 6 | return filtered 7 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/master.py: -------------------------------------------------------------------------------- 1 | from .base import ImageBuilder 2 | 3 | 4 | class MasterImageBuilder(ImageBuilder): 5 | 6 | def __init__(self): 7 | ImageBuilder.__init__(self, composeFilePath='master') 8 | -------------------------------------------------------------------------------- /demo/utils/componentRunner/__init__.py: -------------------------------------------------------------------------------- 1 | from .actor import ActorRunner 2 | from .base import BaseRunner 3 | from .master import MasterRunner 4 | from .remoteLogger import RemoteLoggerRunner 5 | from .user import UserRunner 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/periodicTask.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | from typing import List 3 | from typing import Tuple 4 | 5 | PeriodicTask = Tuple[Callable, float] 6 | PeriodicTasks = List[PeriodicTask] 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/task/base.py: -------------------------------------------------------------------------------- 1 | class Task: 2 | 3 | def __init__(self, name: str): 4 | self.name = name 5 | 6 | def __repr__(self): 7 | return 'Task(name=%s)' % self.name 8 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/periodicTask.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | from typing import List 3 | from typing import Tuple 4 | 5 | PeriodicTask = Tuple[Callable, float] 6 | PeriodicTasks = List[PeriodicTask] 7 | -------------------------------------------------------------------------------- /demo/utils/componentRunner/remoteLogger.py: -------------------------------------------------------------------------------- 1 | from .base import BaseRunner 2 | 3 | 4 | class RemoteLoggerRunner(BaseRunner): 5 | def __init__(self): 6 | BaseRunner.__init__(self, componentName='remoteLogger') 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/periodicTask.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | from typing import List 3 | from typing import Tuple 4 | 5 | PeriodicTask = Tuple[Callable, float] 6 | PeriodicTasks = List[PeriodicTask] 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/master/data/db 2 | .DS_Store 3 | *~ 4 | .vscode/ 5 | *.mp4 6 | *.json 7 | *.jpg 8 | *.txt 9 | src/nginx/nginx.conf 10 | **__pycache__ 11 | .idea 12 | **.csv 13 | test/ 14 | **test.py 15 | *.tar 16 | uploadArchive.sh 17 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/periodicTask.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | from typing import List 3 | from typing import Tuple 4 | 5 | PeriodicTask = Tuple[Callable, float] 6 | PeriodicTasks = List[PeriodicTask] 7 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/periodicTask.py: -------------------------------------------------------------------------------- 1 | from typing import Callable 2 | from typing import List 3 | from typing import Tuple 4 | 5 | PeriodicTask = Tuple[Callable, float] 6 | PeriodicTasks = List[PeriodicTask] 7 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/remoteLogger.py: -------------------------------------------------------------------------------- 1 | from .base import ImageBuilder 2 | 3 | 4 | class RemoteLoggerImageBuilder(ImageBuilder): 5 | 6 | def __init__(self): 7 | ImageBuilder.__init__(self, composeFilePath='remoteLogger') 8 | -------------------------------------------------------------------------------- /containers/database/mariadb/.env.example: -------------------------------------------------------------------------------- 1 | MARIADB_DATA_DIR=data 2 | MARIADB_LOG_DIR=logs 3 | MYSQL_ROOT_HOST=0.0.0.0 4 | MYSQL_ROOT_PASSWORD=passwordForRoot 5 | MYSQL_DATABASE=fogbus2 6 | MYSQL_USER=fogbus2 7 | MYSQL_PASSWORD=passwordForUser 8 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .assessResourceScore import assessResourceScore 2 | from .genMachineIDForTaskHandler import genMachineIDForTaskHandler 3 | from .initSchedulerByName import initSchedulerByName 4 | -------------------------------------------------------------------------------- /containers/rebuild.sh: -------------------------------------------------------------------------------- 1 | build() { 2 | 3 | cd $1 4 | docker-compose \ 5 | build 6 | cd ..} 7 | 8 | build remoteLogger 9 | build master 10 | build user 11 | build actor 12 | cd actor/sources/taskExecutorsDockerfile && ./rebuild.sh 13 | -------------------------------------------------------------------------------- /scripts/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/initiator/__init__.py: -------------------------------------------------------------------------------- 1 | from .actor import ActorInitiator 2 | from .base import BaseInitiator 3 | from .complete import Initiator 4 | from .master import MasterInitiator 5 | from .taskExecutor import TaskExecutorInitiator 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/roles/tools/generateTokenList.py: -------------------------------------------------------------------------------- 1 | from secrets import token_hex as tokenHex 2 | 3 | 4 | def generateTokenList(length: int): 5 | tokenList = [tokenHex(32) for _ in range(length)] 6 | return tokenList 7 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/__init__.py: -------------------------------------------------------------------------------- 1 | from .actor import ActorImageBuilder 2 | from .master import MasterImageBuilder 3 | from .remoteLogger import RemoteLoggerImageBuilder 4 | from .taskExecutor import TaskExecutorImageBuilder 5 | from .user import UserImageBuilder 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/__init__.py: -------------------------------------------------------------------------------- 1 | from .messageHandler import TaskExecutorMessageHandler 2 | from .profiler import ResourcesProfiler 3 | from .registration import RegistrationManager 4 | from .tasks import * 5 | from .tools import initTask 6 | -------------------------------------------------------------------------------- /demo/utils/imageBuilder/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .configActor import ConfigActor 2 | from .configMaster import ConfigMaster 3 | from .configRemoteLogger import ConfigRemoteLogger 4 | from .configUser import ConfigUser 5 | from .taskExecutor import ConfigTaskExecutor 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .configActor import ConfigActor 2 | from .configMaster import ConfigMaster 3 | from .configRemoteLogger import ConfigRemoteLogger 4 | from .configUser import ConfigUser 5 | from .taskExecutor import ConfigTaskExecutor 6 | -------------------------------------------------------------------------------- /containers/stopContainer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ $1 ]; then 4 | docker stop $(docker ps -a -q --filter="name=$1") 5 | docker rm $(docker ps -a -q --filter="name=$1") 6 | else 7 | docker stop $(docker ps -a -q) 8 | docker rm $(docker ps -a -q) 9 | fi 10 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .configActor import ConfigActor 2 | from .configMaster import ConfigMaster 3 | from .configRemoteLogger import ConfigRemoteLogger 4 | from .configUser import ConfigUser 5 | from .taskExecutor import ConfigTaskExecutor 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/idManager/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import BaseIDManager 2 | 3 | 4 | class IDManager: 5 | actor: BaseIDManager = BaseIDManager() 6 | user: BaseIDManager = BaseIDManager() 7 | taskExecutor: BaseIDManager = BaseIDManager() 8 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .configActor import ConfigActor 2 | from .configMaster import ConfigMaster 3 | from .configRemoteLogger import ConfigRemoteLogger 4 | from .configUser import ConfigUser 5 | from .taskExecutor import ConfigTaskExecutor 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/__init__.py: -------------------------------------------------------------------------------- 1 | from .configActor import ConfigActor 2 | from .configMaster import ConfigMaster 3 | from .configRemoteLogger import ConfigRemoteLogger 4 | from .configUser import ConfigUser 5 | from .taskExecutor import ConfigTaskExecutor 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .base import Discovered 3 | from .manager import DiscoveredManager 4 | from .masters import DiscoveredMasters 5 | from .remoteLoggers import DiscoveredRemoteLoggers 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .base import Discovered 3 | from .manager import DiscoveredManager 4 | from .masters import DiscoveredMasters 5 | from .remoteLoggers import DiscoveredRemoteLoggers 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/user/sources/requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2021.5.30 2 | charset-normalizer==2.0.4 3 | docker==5.0.0 4 | idna==3.2 5 | numpy==1.22.2 6 | psutil==5.8.0 7 | python-dotenv==0.19.0 8 | requests==2.26.0 9 | six==1.16.0 10 | urllib3==1.26.6 11 | websocket-client==1.1.0 12 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/discovered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .base import Discovered 3 | from .manager import DiscoveredManager 4 | from .masters import DiscoveredMasters 5 | from .remoteLoggers import DiscoveredRemoteLoggers 6 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /scripts/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/discovered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .base import Discovered 3 | from .manager import DiscoveredManager 4 | from .masters import DiscoveredMasters 5 | from .remoteLoggers import DiscoveredRemoteLoggers 6 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/discovered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .base import Discovered 3 | from .manager import DiscoveredManager 4 | from .masters import DiscoveredMasters 5 | from .remoteLoggers import DiscoveredRemoteLoggers 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/camelToSnake.py: -------------------------------------------------------------------------------- 1 | from re import sub 2 | 3 | 4 | def camelToSnake(name): 5 | # https://stackoverflow.com/questions/1175208 6 | name = sub('(.)([A-Z][a-z]+)', r'\1_\2', name) 7 | return sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() 8 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .discovered import Discovered 2 | from .discovered import DiscoveredActors 3 | from .discovered import DiscoveredMasters 4 | from .discovered import DiscoveredRemoteLoggers 5 | from .resourceDiscovery import ResourcesDiscovery 6 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .discovered import Discovered 2 | from .discovered import DiscoveredActors 3 | from .discovered import DiscoveredMasters 4 | from .discovered import DiscoveredRemoteLoggers 5 | from .resourceDiscovery import ResourcesDiscovery 6 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .discovered import Discovered 2 | from .discovered import DiscoveredActors 3 | from .discovered import DiscoveredMasters 4 | from .discovered import DiscoveredRemoteLoggers 5 | from .resourceDiscovery import ResourcesDiscovery 6 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/profiler/actor.py: -------------------------------------------------------------------------------- 1 | from .images import ImagesProfiler 2 | 3 | 4 | class ActorProfiler(ImagesProfiler): 5 | 6 | def profileAll(self): 7 | self.profileImages() 8 | self.profileRunningContainers() 9 | self.profileResources() 10 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .discovered import Discovered 2 | from .discovered import DiscoveredActors 3 | from .discovered import DiscoveredMasters 4 | from .discovered import DiscoveredRemoteLoggers 5 | from .resourceDiscovery import ResourcesDiscovery 6 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/__init__.py: -------------------------------------------------------------------------------- 1 | from .discovered import Discovered 2 | from .discovered import DiscoveredActors 3 | from .discovered import DiscoveredMasters 4 | from .discovered import DiscoveredRemoteLoggers 5 | from .resourceDiscovery import ResourcesDiscovery 6 | -------------------------------------------------------------------------------- /config/host/hostIP.csv: -------------------------------------------------------------------------------- 1 | hostname, publicIP 2 | nectar1-amd, 45.113.235.222 3 | nectar2-amd, 45.113.232.187 4 | oracle1-ampere, 168.138.8.100 5 | oracle2-ampere, 168.138.13.174 6 | oracle3-intel, 168.138.8.46 7 | oracle4-intel, 168.138.14.220 8 | rpiA-4gb-arm64v8, 9 | rpiB-2gb-arm64v8, 10 | laptop, 11 | -------------------------------------------------------------------------------- /containers/actor/sources/requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2021.5.30 2 | charset-normalizer==2.0.4 3 | docker==5.0.0 4 | idna==3.2 5 | iperf3==0.1.11 6 | psutil==5.8.0 7 | python-dotenv==0.19.0 8 | pythonping==1.1.0 9 | requests==2.26.0 10 | six==1.16.0 11 | urllib3==1.26.6 12 | websocket-client==1.1.0 13 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/component/role.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ComponentRole(Enum): 5 | REMOTE_LOGGER = 'RemoteLogger' 6 | MASTER = 'Master' 7 | ACTOR = 'Actor' 8 | TASK_EXECUTOR = 'TaskExecutor' 9 | USER = 'User' 10 | DEFAULT = 'Default' 11 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/component/role.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ComponentRole(Enum): 5 | REMOTE_LOGGER = 'RemoteLogger' 6 | MASTER = 'Master' 7 | ACTOR = 'Actor' 8 | TASK_EXECUTOR = 'TaskExecutor' 9 | USER = 'User' 10 | DEFAULT = 'Default' 11 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife0.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife0(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 42, 8 | 'GameOfLife0', 9 | ((0, 0), (16, 32))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife1.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife1(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 43, 8 | 'GameOfLife1', 9 | ((0, 32), (16, 64))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife2.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife2(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 44, 8 | 'GameOfLife2', 9 | ((16, 32), (24, 48))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife3.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife3(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 45, 8 | 'GameOfLife3', 9 | ((16, 48), (24, 64))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife4.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife4(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 46, 8 | 'GameOfLife4', 9 | ((24, 48), (28, 56))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife48.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife48(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 90, 8 | 'GameOfLife48', 9 | ((24, 0), (28, 8))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife5.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife5(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 47, 8 | 'GameOfLife5', 9 | ((24, 56), (28, 64))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife56.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife56(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 98, 8 | 'GameOfLife56', 9 | ((28, 0), (30, 4))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife57.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife57(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 99, 8 | 'GameOfLife57', 9 | ((28, 4), (30, 8))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife6.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife6(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 48, 8 | 'GameOfLife6', 9 | ((28, 56), (30, 60))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife7.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife7(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 49, 8 | 'GameOfLife7', 9 | ((28, 60), (30, 64))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife8.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife8(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 50, 8 | 'GameOfLife8', 9 | ((30, 60), (32, 62))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife9.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife9(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 51, 8 | 'GameOfLife9', 9 | ((30, 62), (32, 64))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/testTask.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class TestTask(BaseTask): 5 | def __init__(self, appID: int): 6 | super().__init__(appID, 'TestApp') 7 | 8 | def exec(self, inputData): 9 | return inputData * 2 10 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/component/role.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ComponentRole(Enum): 5 | REMOTE_LOGGER = 'RemoteLogger' 6 | MASTER = 'Master' 7 | ACTOR = 'Actor' 8 | TASK_EXECUTOR = 'TaskExecutor' 9 | USER = 'User' 10 | DEFAULT = 'Default' 11 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/tools/assessResourceScore.py: -------------------------------------------------------------------------------- 1 | from ....types import Resources 2 | 3 | 4 | def assessResourceScore(resources: Resources) -> float: 5 | score = (1 - resources.cpu.utilization) * resources.cpu.cores \ 6 | * resources.cpu.frequency 7 | return score 8 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/component/role.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ComponentRole(Enum): 5 | REMOTE_LOGGER = 'RemoteLogger' 6 | MASTER = 'Master' 7 | ACTOR = 'Actor' 8 | TASK_EXECUTOR = 'TaskExecutor' 9 | USER = 'User' 10 | DEFAULT = 'Default' 11 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife10.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife10(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 52, 8 | 'GameOfLife10', 9 | ((30, 56), (32, 58))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife11.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife11(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 53, 8 | 'GameOfLife11', 9 | ((30, 58), (32, 60))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife12.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife12(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 54, 8 | 'GameOfLife12', 9 | ((28, 48), (30, 52))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife13.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife13(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 55, 8 | 'GameOfLife13', 9 | ((28, 52), (30, 56))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife14.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife14(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 56, 8 | 'GameOfLife14', 9 | ((30, 52), (32, 54))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife15.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife15(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 57, 8 | 'GameOfLife15', 9 | ((30, 54), (32, 56))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife16.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife16(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 58, 8 | 'GameOfLife16', 9 | ((30, 48), (32, 50))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife17.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife17(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 59, 8 | 'GameOfLife17', 9 | ((30, 50), (32, 52))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife18.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife18(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 60, 8 | 'GameOfLife18', 9 | ((24, 32), (28, 40))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife19.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife19(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 61, 8 | 'GameOfLife19', 9 | ((24, 40), (28, 48))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife20.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife20(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 62, 8 | 'GameOfLife20', 9 | ((28, 40), (30, 44))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife21.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife21(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 63, 8 | 'GameOfLife21', 9 | ((28, 44), (30, 48))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife22.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife22(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 64, 8 | 'GameOfLife22', 9 | ((30, 44), (32, 46))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife23.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife23(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 65, 8 | 'GameOfLife23', 9 | ((30, 46), (32, 48))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife24.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife24(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 66, 8 | 'GameOfLife24', 9 | ((30, 40), (32, 42))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife25.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife25(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 67, 8 | 'GameOfLife25', 9 | ((30, 42), (32, 44))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife26.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife26(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 68, 8 | 'GameOfLife26', 9 | ((28, 32), (30, 36))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife27.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife27(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 69, 8 | 'GameOfLife27', 9 | ((28, 36), (30, 40))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife28.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife28(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 70, 8 | 'GameOfLife28', 9 | ((30, 36), (32, 38))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife29.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife29(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 71, 8 | 'GameOfLife29', 9 | ((30, 38), (32, 40))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife30.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife30(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 72, 8 | 'GameOfLife30', 9 | ((30, 32), (32, 34))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife31.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife31(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 73, 8 | 'GameOfLife31', 9 | ((30, 34), (32, 36))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife32.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife32(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 74, 8 | 'GameOfLife32', 9 | ((16, 0), (24, 16))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife33.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife33(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 75, 8 | 'GameOfLife33', 9 | ((16, 16), (24, 32))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife34.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife34(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 76, 8 | 'GameOfLife34', 9 | ((24, 16), (28, 24))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife35.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife35(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 77, 8 | 'GameOfLife35', 9 | ((24, 24), (28, 32))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife36.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife36(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 78, 8 | 'GameOfLife36', 9 | ((28, 24), (30, 28))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife37.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife37(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 79, 8 | 'GameOfLife37', 9 | ((28, 28), (30, 32))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife38.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife38(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 80, 8 | 'GameOfLife38', 9 | ((30, 28), (32, 30))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife39.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife39(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 81, 8 | 'GameOfLife39', 9 | ((30, 30), (32, 32))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife40.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife40(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 82, 8 | 'GameOfLife40', 9 | ((30, 24), (32, 26))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife41.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife41(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 83, 8 | 'GameOfLife41', 9 | ((30, 26), (32, 28))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife42.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife42(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 84, 8 | 'GameOfLife42', 9 | ((28, 16), (30, 20))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife43.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife43(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 85, 8 | 'GameOfLife43', 9 | ((28, 20), (30, 24))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife44.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife44(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 86, 8 | 'GameOfLife44', 9 | ((30, 20), (32, 22))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife45.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife45(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 87, 8 | 'GameOfLife45', 9 | ((30, 22), (32, 24))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife46.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife46(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 88, 8 | 'GameOfLife46', 9 | ((30, 16), (32, 18))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife47.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife47(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 89, 8 | 'GameOfLife47', 9 | ((30, 18), (32, 20))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife49.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife49(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 91, 8 | 'GameOfLife49', 9 | ((24, 8), (28, 16))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife50.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife50(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 92, 8 | 'GameOfLife50', 9 | ((28, 8), (30, 12))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife51.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife51(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 93, 8 | 'GameOfLife51', 9 | ((28, 12), (30, 16))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife52.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife52(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 94, 8 | 'GameOfLife52', 9 | ((30, 12), (32, 14))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife53.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife53(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 95, 8 | 'GameOfLife53', 9 | ((30, 14), (32, 16))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife54.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife54(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 96, 8 | 'GameOfLife54', 9 | ((30, 8), (32, 10))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife55.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife55(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 97, 8 | 'GameOfLife55', 9 | ((30, 10), (32, 12))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife58.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife58(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 100, 8 | 'GameOfLife58', 9 | ((30, 4), (32, 6))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife59.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife59(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 101, 8 | 'GameOfLife59', 9 | ((30, 6), (32, 8))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife60.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife60(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 102, 8 | 'GameOfLife60', 9 | ((30, 0), (32, 2))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/gameOfLife61.py: -------------------------------------------------------------------------------- 1 | from .gameOfLife import GameOfLife 2 | 3 | 4 | class GameOfLife61(GameOfLife): 5 | def __init__(self): 6 | super().__init__( 7 | 103, 8 | 'GameOfLife61', 9 | ((30, 2), (32, 4))) 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/component/role.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ComponentRole(Enum): 5 | REMOTE_LOGGER = 'RemoteLogger' 6 | MASTER = 'Master' 7 | ACTOR = 'Actor' 8 | TASK_EXECUTOR = 'TaskExecutor' 9 | USER = 'User' 10 | DEFAULT = 'Default' 11 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/snakeToCamel.py: -------------------------------------------------------------------------------- 1 | def snakeToCamel(snakeStr: str): 2 | if snakeStr == snakeStr.lower(): 3 | return snakeStr.upper() 4 | # https://stackoverflow.com/questions/19053707 5 | components = snakeStr.split('_') 6 | return ''.join(x.title() for x in components) 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/registered/__init__.py: -------------------------------------------------------------------------------- 1 | from .actors import RegisteredActors 2 | from .base import Registered 3 | from .manager import RegisteredManager 4 | from .masters import RegisteredMasters 5 | from .taskExecutors import RegisteredTaskExecutors 6 | from .users import RegisteredUsers 7 | -------------------------------------------------------------------------------- /containers/user/sources/utils/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .basicMessageHandler import BasicMessageHandler 2 | from .handlerReturn import HandlerReturn 3 | from .message import MessageReceived 4 | from .message import MessageToSend 5 | from .messageReceiver import MessageReceiver 6 | from .messageSender import MessageSender 7 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .basicMessageHandler import BasicMessageHandler 2 | from .handlerReturn import HandlerReturn 3 | from .message import MessageReceived 4 | from .message import MessageToSend 5 | from .messageReceiver import MessageReceiver 6 | from .messageSender import MessageSender 7 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/connection/request.py: -------------------------------------------------------------------------------- 1 | from socket import socket 2 | 3 | from ..types import Address 4 | 5 | 6 | class ConnectionRequest: 7 | 8 | def __init__(self, clientSocket: socket, clientAddr: Address): 9 | self.clientSocket = clientSocket 10 | self.clientAddr = clientAddr 11 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/hostProfiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actorResources import ActorResources 2 | from .cpu import CPU 3 | from .images import Images 4 | from .memory import Memory 5 | from .processingTime import ProcessingTime 6 | from .resources import Resources 7 | from .runningContainres import RunningContainers 8 | -------------------------------------------------------------------------------- /containers/master/sources/utils/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .basicMessageHandler import BasicMessageHandler 2 | from .handlerReturn import HandlerReturn 3 | from .message import MessageReceived 4 | from .message import MessageToSend 5 | from .messageReceiver import MessageReceiver 6 | from .messageSender import MessageSender 7 | -------------------------------------------------------------------------------- /containers/master/sources/utils/connection/request.py: -------------------------------------------------------------------------------- 1 | from socket import socket 2 | 3 | from ..types import Address 4 | 5 | 6 | class ConnectionRequest: 7 | 8 | def __init__(self, clientSocket: socket, clientAddr: Address): 9 | self.clientSocket = clientSocket 10 | self.clientAddr = clientAddr 11 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/hostProfiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actorResources import ActorResources 2 | from .cpu import CPU 3 | from .images import Images 4 | from .memory import Memory 5 | from .processingTime import ProcessingTime 6 | from .resources import Resources 7 | from .runningContainres import RunningContainers 8 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2021.5.30 2 | charset-normalizer==2.0.4 3 | docker==5.0.0 4 | idna==3.2 5 | mysql-connector-python==8.0.26 6 | protobuf==3.17.3 7 | psutil==5.8.0 8 | python-dotenv==0.19.0 9 | requests==2.26.0 10 | six==1.16.0 11 | urllib3==1.26.6 12 | websocket-client==1.1.0 13 | -------------------------------------------------------------------------------- /containers/user/sources/utils/connection/request.py: -------------------------------------------------------------------------------- 1 | from socket import socket 2 | 3 | from ..types import Address 4 | 5 | 6 | class ConnectionRequest: 7 | 8 | def __init__(self, clientSocket: socket, clientAddr: Address): 9 | self.clientSocket = clientSocket 10 | self.clientAddr = clientAddr 11 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/hostProfiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actorResources import ActorResources 2 | from .cpu import CPU 3 | from .images import Images 4 | from .memory import Memory 5 | from .processingTime import ProcessingTime 6 | from .resources import Resources 7 | from .runningContainres import RunningContainers 8 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .basicMessageHandler import BasicMessageHandler 2 | from .handlerReturn import HandlerReturn 3 | from .message import MessageReceived 4 | from .message import MessageToSend 5 | from .messageReceiver import MessageReceiver 6 | from .messageSender import MessageSender 7 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/connection/request.py: -------------------------------------------------------------------------------- 1 | from socket import socket 2 | 3 | from ..types import Address 4 | 5 | 6 | class ConnectionRequest: 7 | 8 | def __init__(self, clientSocket: socket, clientAddr: Address): 9 | self.clientSocket = clientSocket 10 | self.clientAddr = clientAddr 11 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .basicMessageHandler import BasicMessageHandler 2 | from .handlerReturn import HandlerReturn 3 | from .message import MessageReceived 4 | from .message import MessageToSend 5 | from .messageReceiver import MessageReceiver 6 | from .messageSender import MessageSender 7 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/connection/request.py: -------------------------------------------------------------------------------- 1 | from socket import socket 2 | 3 | from ..types import Address 4 | 5 | 6 | class ConnectionRequest: 7 | 8 | def __init__(self, clientSocket: socket, clientAddr: Address): 9 | self.clientSocket = clientSocket 10 | self.clientAddr = clientAddr 11 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/hostProfiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actorResources import ActorResources 2 | from .cpu import CPU 3 | from .images import Images 4 | from .memory import Memory 5 | from .processingTime import ProcessingTime 6 | from .resources import Resources 7 | from .runningContainres import RunningContainers 8 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/hostProfiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .actorResources import ActorResources 2 | from .cpu import CPU 3 | from .images import Images 4 | from .memory import Memory 5 | from .processingTime import ProcessingTime 6 | from .resources import Resources 7 | from .runningContainres import RunningContainers 8 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .camelToSnake import camelToSnake 2 | from .debugLogger import newDebugLogger 3 | from .decrypt import decrypt 4 | from .encrypt import encrypt 5 | from .filterIllegalCharacter import filterIllegalCharacter 6 | from .snakeToCamel import snakeToCamel 7 | from .terminate import terminate 8 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .camelToSnake import camelToSnake 2 | from .debugLogger import newDebugLogger 3 | from .decrypt import decrypt 4 | from .encrypt import encrypt 5 | from .filterIllegalCharacter import filterIllegalCharacter 6 | from .snakeToCamel import snakeToCamel 7 | from .terminate import terminate 8 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .camelToSnake import camelToSnake 2 | from .debugLogger import newDebugLogger 3 | from .decrypt import decrypt 4 | from .encrypt import encrypt 5 | from .filterIllegalCharacter import filterIllegalCharacter 6 | from .snakeToCamel import snakeToCamel 7 | from .terminate import terminate 8 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/tools/decrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import loads 2 | from traceback import print_exc 3 | from typing import Dict 4 | 5 | 6 | def decrypt(msg: bytes) -> Dict: 7 | try: 8 | obj = loads(msg, fix_imports=True, encoding="bytes") 9 | return obj 10 | except Exception: 11 | print_exc() 12 | -------------------------------------------------------------------------------- /containers/master/sources/utils/tools/decrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import loads 2 | from traceback import print_exc 3 | from typing import Dict 4 | 5 | 6 | def decrypt(msg: bytes) -> Dict: 7 | try: 8 | obj = loads(msg, fix_imports=True, encoding="bytes") 9 | return obj 10 | except Exception: 11 | print_exc() 12 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .camelToSnake import camelToSnake 2 | from .debugLogger import newDebugLogger 3 | from .decrypt import decrypt 4 | from .encrypt import encrypt 5 | from .filterIllegalCharacter import filterIllegalCharacter 6 | from .snakeToCamel import snakeToCamel 7 | from .terminate import terminate 8 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .camelToSnake import camelToSnake 2 | from .debugLogger import newDebugLogger 3 | from .decrypt import decrypt 4 | from .encrypt import encrypt 5 | from .filterIllegalCharacter import filterIllegalCharacter 6 | from .snakeToCamel import snakeToCamel 7 | from .terminate import terminate 8 | -------------------------------------------------------------------------------- /containers/user/sources/utils/tools/decrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import loads 2 | from traceback import print_exc 3 | from typing import Dict 4 | 5 | 6 | def decrypt(msg: bytes) -> Dict: 7 | try: 8 | obj = loads(msg, fix_imports=True, encoding="bytes") 9 | return obj 10 | except Exception: 11 | print_exc() 12 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/serializableList.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | 5 | class SerializableList: 6 | @staticmethod 7 | @abstractmethod 8 | def fromList(inList: List): 9 | pass 10 | 11 | @abstractmethod 12 | def toList(self) -> List: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/serializableList.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | 5 | class SerializableList: 6 | @staticmethod 7 | @abstractmethod 8 | def fromList(inList: List): 9 | pass 10 | 11 | @abstractmethod 12 | def toList(self) -> List: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/tools/decrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import loads 2 | from traceback import print_exc 3 | from typing import Dict 4 | 5 | 6 | def decrypt(msg: bytes) -> Dict: 7 | try: 8 | obj = loads(msg, fix_imports=True, encoding="bytes") 9 | return obj 10 | except Exception: 11 | print_exc() 12 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/tools/decrypt.py: -------------------------------------------------------------------------------- 1 | from pickle import loads 2 | from traceback import print_exc 3 | from typing import Dict 4 | 5 | 6 | def decrypt(msg: bytes) -> Dict: 7 | try: 8 | obj = loads(msg, fix_imports=True, encoding="bytes") 9 | return obj 10 | except Exception: 11 | print_exc() 12 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/serializableList.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | 5 | class SerializableList: 6 | @staticmethod 7 | @abstractmethod 8 | def fromList(inList: List): 9 | pass 10 | 11 | @abstractmethod 12 | def toList(self) -> List: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/message/subSubType.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageSubSubType(Enum): 7 | NONE = '' 8 | DEFAULT = 'default' 9 | EXPERIMENTAL = 'experimental' 10 | RECEIVE = 'receive' 11 | SEND = 'send' 12 | RESULT = 'result' 13 | TRY = 'try' 14 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/config/mysqlEnvironment.py: -------------------------------------------------------------------------------- 1 | from dotenv import dotenv_values 2 | 3 | mysqlEnv = dotenv_values(".mysql.env") 4 | 5 | 6 | class MySQLEnvironment: 7 | user: str = mysqlEnv['USER'] 8 | host: str = mysqlEnv['HOST'] 9 | port: int = int(mysqlEnv['PORT']) 10 | password: str = mysqlEnv['PASSWORD'] 11 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/serializableList.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | 5 | class SerializableList: 6 | @staticmethod 7 | @abstractmethod 8 | def fromList(inList: List): 9 | pass 10 | 11 | @abstractmethod 12 | def toList(self) -> List: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2021.5.30 2 | charset-normalizer==2.0.4 3 | docker==5.0.0 4 | editdistance==0.5.3 5 | idna==3.2 6 | numpy==1.22.2 7 | Pillow==9.0.1 8 | psutil==5.8.0 9 | pytesseract==0.3.8 10 | python-dotenv==0.19.0 11 | requests==2.26.0 12 | six==1.16.0 13 | urllib3==1.26.6 14 | websocket-client==1.1.0 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/serializableList.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | 5 | class SerializableList: 6 | @staticmethod 7 | @abstractmethod 8 | def fromList(inList: List): 9 | pass 10 | 11 | @abstractmethod 12 | def toList(self) -> List: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/message/subSubType.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageSubSubType(Enum): 7 | NONE = '' 8 | DEFAULT = 'default' 9 | EXPERIMENTAL = 'experimental' 10 | RECEIVE = 'receive' 11 | SEND = 'send' 12 | RESULT = 'result' 13 | TRY = 'try' 14 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/serializableDictionary.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import Dict 3 | 4 | 5 | class SerializableDictionary: 6 | @staticmethod 7 | @abstractmethod 8 | def fromDict(inDict: Dict): 9 | pass 10 | 11 | @abstractmethod 12 | def toDict(self) -> Dict: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/message/subSubType.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageSubSubType(Enum): 7 | NONE = '' 8 | DEFAULT = 'default' 9 | EXPERIMENTAL = 'experimental' 10 | RECEIVE = 'receive' 11 | SEND = 'send' 12 | RESULT = 'result' 13 | TRY = 'try' 14 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/serializableDictionary.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import Dict 3 | 4 | 5 | class SerializableDictionary: 6 | @staticmethod 7 | @abstractmethod 8 | def fromDict(inDict: Dict): 9 | pass 10 | 11 | @abstractmethod 12 | def toDict(self) -> Dict: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/base.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from ...types import ComponentRole 4 | 5 | 6 | class Discovered(set): 7 | 8 | def __init__(self, role: ComponentRole, portRange: Tuple[int, int]): 9 | set.__init__(self) 10 | self.role = role 11 | self.portRange = portRange 12 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/base.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from ...types import ComponentRole 4 | 5 | 6 | class Discovered(set): 7 | 8 | def __init__(self, role: ComponentRole, portRange: Tuple[int, int]): 9 | set.__init__(self) 10 | self.role = role 11 | self.portRange = portRange 12 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/serializableDictionary.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import Dict 3 | 4 | 5 | class SerializableDictionary: 6 | @staticmethod 7 | @abstractmethod 8 | def fromDict(inDict: Dict): 9 | pass 10 | 11 | @abstractmethod 12 | def toDict(self) -> Dict: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/remoteLogger/config/mysqlEnvironment.py: -------------------------------------------------------------------------------- 1 | from dotenv import dotenv_values 2 | 3 | mysqlEnv = dotenv_values(".mysql.env") 4 | 5 | 6 | class MySQLEnvironment: 7 | user: str = mysqlEnv['USER'] 8 | host: str = mysqlEnv['HOST'] 9 | port: int = int(mysqlEnv['PORT']) 10 | password: str = mysqlEnv['PASSWORD'] 11 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/message/subSubType.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageSubSubType(Enum): 7 | NONE = '' 8 | DEFAULT = 'default' 9 | EXPERIMENTAL = 'experimental' 10 | RECEIVE = 'receive' 11 | SEND = 'send' 12 | RESULT = 'result' 13 | TRY = 'try' 14 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/message/subSubType.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageSubSubType(Enum): 7 | NONE = '' 8 | DEFAULT = 'default' 9 | EXPERIMENTAL = 'experimental' 10 | RECEIVE = 'receive' 11 | SEND = 'send' 12 | RESULT = 'result' 13 | TRY = 'try' 14 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/discovered/base.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from ...types import ComponentRole 4 | 5 | 6 | class Discovered(set): 7 | 8 | def __init__(self, role: ComponentRole, portRange: Tuple[int, int]): 9 | set.__init__(self) 10 | self.role = role 11 | self.portRange = portRange 12 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/discovered/base.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from ...types import ComponentRole 4 | 5 | 6 | class Discovered(set): 7 | 8 | def __init__(self, role: ComponentRole, portRange: Tuple[int, int]): 9 | set.__init__(self) 10 | self.role = role 11 | self.portRange = portRange 12 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/serializableDictionary.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import Dict 3 | 4 | 5 | class SerializableDictionary: 6 | @staticmethod 7 | @abstractmethod 8 | def fromDict(inDict: Dict): 9 | pass 10 | 11 | @abstractmethod 12 | def toDict(self) -> Dict: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/discovered/base.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from ...types import ComponentRole 4 | 5 | 6 | class Discovered(set): 7 | 8 | def __init__(self, role: ComponentRole, portRange: Tuple[int, int]): 9 | set.__init__(self) 10 | self.role = role 11 | self.portRange = portRange 12 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/kineticEnergy3.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class KineticEnergy3(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=107, taskName='KineticEnergy3') 7 | self.constant = 1 / 2 8 | 9 | def exec(self, inputData): 10 | return self.constant * inputData 11 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/serializableDictionary.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import Dict 3 | 4 | 5 | class SerializableDictionary: 6 | @staticmethod 7 | @abstractmethod 8 | def fromDict(inDict: Dict): 9 | pass 10 | 11 | @abstractmethod 12 | def toDict(self) -> Dict: 13 | pass 14 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/__init__.py: -------------------------------------------------------------------------------- 1 | from .initiator import ActorInitiator 2 | from .initiator import BaseInitiator 3 | from .initiator import Initiator 4 | from .initiator import MasterInitiator 5 | from .initiator import TaskExecutorInitiator 6 | from .messageHandler import ActorMessageHandler 7 | from .profiler import ActorProfiler 8 | from .profiler import ImagesProfiler 9 | -------------------------------------------------------------------------------- /prepareEnv.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | set -e 3 | 4 | hostsFilename='hosts' 5 | 6 | handle(){ 7 | host=$1 8 | echo "$host"; 9 | scp "env.sh" "$host:new/env.sh" 10 | ssh "$host" "bash ~/new/env.sh" 11 | } 12 | 13 | loop(){ 14 | hostsFilename=$1 15 | while read -r host; 16 | do 17 | handle "$host" 18 | done < "$hostsFilename" 19 | } 20 | 21 | loop "$hostsFilename" 22 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/scheduler/tools/genMachineIDForTaskHandler.py: -------------------------------------------------------------------------------- 1 | from hashlib import sha256 2 | 3 | 4 | def genMachineIDForTaskHandler( 5 | userMachineID: str, 6 | workerMachineID: str, 7 | machineName: str): 8 | info = machineName 9 | info += userMachineID 10 | info += workerMachineID 11 | return sha256(info.encode('utf-8')).hexdigest() 12 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/__init__.py: -------------------------------------------------------------------------------- 1 | from .address import Address 2 | from .autoDictionary import AutoDictionary 3 | from .pairsMedian import PairsMedian 4 | from .periodicTask import PeriodicTask 5 | from .periodicTask import PeriodicTasks 6 | from .sequenceMedian import SequenceMedian 7 | from .serializableDictionary import SerializableDictionary 8 | from .serializableList import SerializableList 9 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/__init__.py: -------------------------------------------------------------------------------- 1 | from .address import Address 2 | from .autoDictionary import AutoDictionary 3 | from .pairsMedian import PairsMedian 4 | from .periodicTask import PeriodicTask 5 | from .periodicTask import PeriodicTasks 6 | from .sequenceMedian import SequenceMedian 7 | from .serializableDictionary import SerializableDictionary 8 | from .serializableList import SerializableList 9 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/__init__.py: -------------------------------------------------------------------------------- 1 | from .address import Address 2 | from .autoDictionary import AutoDictionary 3 | from .pairsMedian import PairsMedian 4 | from .periodicTask import PeriodicTask 5 | from .periodicTask import PeriodicTasks 6 | from .sequenceMedian import SequenceMedian 7 | from .serializableDictionary import SerializableDictionary 8 | from .serializableList import SerializableList 9 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/configActor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['ACTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigActor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/configMaster.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['MASTER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigMaster(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/configUser.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['USER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigUser(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/configActor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['ACTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigActor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/configUser.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['USER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigUser(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/__init__.py: -------------------------------------------------------------------------------- 1 | from .address import Address 2 | from .autoDictionary import AutoDictionary 3 | from .pairsMedian import PairsMedian 4 | from .periodicTask import PeriodicTask 5 | from .periodicTask import PeriodicTasks 6 | from .sequenceMedian import SequenceMedian 7 | from .serializableDictionary import SerializableDictionary 8 | from .serializableList import SerializableList 9 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/OCR/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-ocr: 6 | # image: fogbus2-ocr 7 | image: cloudslab/fogbus2-ocr 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/OCR/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/__init__.py: -------------------------------------------------------------------------------- 1 | from .address import Address 2 | from .autoDictionary import AutoDictionary 3 | from .pairsMedian import PairsMedian 4 | from .periodicTask import PeriodicTask 5 | from .periodicTask import PeriodicTasks 6 | from .sequenceMedian import SequenceMedian 7 | from .serializableDictionary import SerializableDictionary 8 | from .serializableList import SerializableList 9 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/configActor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['ACTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigActor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/configMaster.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['MASTER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigMaster(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/configUser.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['USER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigUser(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/configMaster.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['MASTER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigMaster(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/idManager/base.py: -------------------------------------------------------------------------------- 1 | from threading import Lock 2 | 3 | 4 | class BaseIDManager: 5 | def __init__(self): 6 | self.lock = Lock() 7 | self.currentID: int = 0 8 | 9 | def next(self) -> str: 10 | self.lock.acquire() 11 | self.currentID += 1 12 | ret = self.currentID 13 | self.lock.release() 14 | return str(ret) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/configActor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['ACTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigActor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/configUser.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['USER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigUser(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/configActor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['ACTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigActor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/configUser.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['USER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigUser(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/configMaster.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['MASTER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigMaster(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/configMaster.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['MASTER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigMaster(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1])) 15 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/discovered/manager.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .masters import DiscoveredMasters 3 | from .remoteLoggers import DiscoveredRemoteLoggers 4 | 5 | 6 | class DiscoveredManager: 7 | actors: DiscoveredActors = DiscoveredActors() 8 | masters: DiscoveredMasters = DiscoveredMasters() 9 | remoteLoggers: DiscoveredRemoteLoggers = DiscoveredRemoteLoggers() 10 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/manager.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .masters import DiscoveredMasters 3 | from .remoteLoggers import DiscoveredRemoteLoggers 4 | 5 | 6 | class DiscoveredManager: 7 | actors: DiscoveredActors = DiscoveredActors() 8 | masters: DiscoveredMasters = DiscoveredMasters() 9 | remoteLoggers: DiscoveredRemoteLoggers = DiscoveredRemoteLoggers() 10 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/types/taskWithChildren.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | from .task import Task 4 | 5 | 6 | class TaskWithChildren(Task): 7 | 8 | def __init__(self, name: str, token: str, childrenTokens: Set = None): 9 | Task.__init__(self, name, token) 10 | if childrenTokens is None: 11 | childrenTokens = set() 12 | self.childrenTokens = childrenTokens 13 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/manager.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .masters import DiscoveredMasters 3 | from .remoteLoggers import DiscoveredRemoteLoggers 4 | 5 | 6 | class DiscoveredManager: 7 | actors: DiscoveredActors = DiscoveredActors() 8 | masters: DiscoveredMasters = DiscoveredMasters() 9 | remoteLoggers: DiscoveredRemoteLoggers = DiscoveredRemoteLoggers() 10 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/taskExecutor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['TASK_EXECUTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigTaskExecutor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/taskExecutor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['TASK_EXECUTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigTaskExecutor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/discovered/manager.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .masters import DiscoveredMasters 3 | from .remoteLoggers import DiscoveredRemoteLoggers 4 | 5 | 6 | class DiscoveredManager: 7 | actors: DiscoveredActors = DiscoveredActors() 8 | masters: DiscoveredMasters = DiscoveredMasters() 9 | remoteLoggers: DiscoveredRemoteLoggers = DiscoveredRemoteLoggers() 10 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/discovered/manager.py: -------------------------------------------------------------------------------- 1 | from .actors import DiscoveredActors 2 | from .masters import DiscoveredMasters 3 | from .remoteLoggers import DiscoveredRemoteLoggers 4 | 5 | 6 | class DiscoveredManager: 7 | actors: DiscoveredActors = DiscoveredActors() 8 | masters: DiscoveredMasters = DiscoveredMasters() 9 | remoteLoggers: DiscoveredRemoteLoggers = DiscoveredRemoteLoggers() 10 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/taskExecutor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['TASK_EXECUTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigTaskExecutor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/config/configRemoteLogger.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['REMOTE_LOGGER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigRemoteLogger(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/config/configRemoteLogger.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['REMOTE_LOGGER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigRemoteLogger(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/taskExecutor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['TASK_EXECUTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigTaskExecutor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/taskExecutor.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['TASK_EXECUTOR_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigTaskExecutor(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/kineticEnergy0.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class KineticEnergy0(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=104, taskName='KineticEnergy0') 7 | 8 | def exec(self, inputData): 9 | m, v0 = inputData['m'], inputData['v0'] 10 | v0Square = v0 * v0 11 | inputData['v0Square'] = v0Square 12 | return inputData 13 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/kineticEnergy1.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class KineticEnergy1(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=105, taskName='KineticEnergy1') 7 | 8 | def exec(self, inputData): 9 | m, v1 = inputData['m'], inputData['v1'] 10 | v1Square = v1 * v1 11 | inputData['v1Square'] = v1Square 12 | return inputData 13 | -------------------------------------------------------------------------------- /containers/user/sources/utils/config/configRemoteLogger.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['REMOTE_LOGGER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigRemoteLogger(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /env.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | #sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y 5 | 6 | 7 | cd ~/new 8 | sudo apt install python3.9-dev python3-pip python3.9-distutils libgl1-mesa-glx -y 9 | python3.9 -m pip install -U pip 10 | python3.9 -m pip install -U sphinx 11 | python3.9 -m pip install -r containers/user/sources/requirements.txt 12 | cd containers/database/mariadb/ && python3.9 configure.py --init --create 13 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/config/configRemoteLogger.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['REMOTE_LOGGER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigRemoteLogger(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/config/configRemoteLogger.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from dotenv import dotenv_values 4 | 5 | from .base import Config 6 | 7 | environment = dotenv_values(".env") 8 | 9 | portRangeStr = environment['REMOTE_LOGGER_PORT_RANGE'] 10 | portRange = portRangeStr.split('-') 11 | 12 | 13 | class ConfigRemoteLogger(Config): 14 | portRange: Tuple[int, int] = (int(portRange[0]), int(portRange[1]) + 1) 15 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife0/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life0: 6 | # image: fogbus2-game_of_life0 7 | image: cloudslab/fogbus2-game_of_life0 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife0/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife1/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life1: 6 | # image: fogbus2-game_of_life1 7 | image: cloudslab/fogbus2-game_of_life1 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife1/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life2: 6 | # image: fogbus2-game_of_life2 7 | image: cloudslab/fogbus2-game_of_life2 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife2/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife3/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life3: 6 | # image: fogbus2-game_of_life3 7 | image: cloudslab/fogbus2-game_of_life3 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife3/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife4/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life4: 6 | # image: fogbus2-game_of_life4 7 | image: cloudslab/fogbus2-game_of_life4 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife4/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife5/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life5: 6 | # image: fogbus2-game_of_life5 7 | image: cloudslab/fogbus2-game_of_life5 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife5/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife6/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life6: 6 | # image: fogbus2-game_of_life6 7 | image: cloudslab/fogbus2-game_of_life6 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife6/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife7/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life7: 6 | # image: fogbus2-game_of_life7 7 | image: cloudslab/fogbus2-game_of_life7 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife7/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife8/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life8: 6 | # image: fogbus2-game_of_life8 7 | image: cloudslab/fogbus2-game_of_life8 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife8/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife9/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life9: 6 | # image: fogbus2-game_of_life9 7 | image: cloudslab/fogbus2-game_of_life9 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife9/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/NaiveFormula0/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-naive_formula0: 6 | # image: fogbus2-naive_formula0 7 | image: cloudslab/fogbus2-naive_formula0 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/NaiveFormula0/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/NaiveFormula1/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-naive_formula1: 6 | # image: fogbus2-naive_formula1 7 | image: cloudslab/fogbus2-naive_formula1 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/NaiveFormula1/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/NaiveFormula2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-naive_formula2: 6 | # image: fogbus2-naive_formula2 7 | image: cloudslab/fogbus2-naive_formula2 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/NaiveFormula2/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/NaiveFormula3/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-naive_formula3: 6 | # image: fogbus2-naive_formula3 7 | image: cloudslab/fogbus2-naive_formula3 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/NaiveFormula3/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/EyeDetection/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-eye_detection: 6 | # image: fogbus2-eye_detection 7 | image: cloudslab/fogbus2-eye_detection 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/EyeDetection/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife10/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life10: 6 | # image: fogbus2-game_of_life10 7 | image: cloudslab/fogbus2-game_of_life10 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife10/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife11/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life11: 6 | # image: fogbus2-game_of_life11 7 | image: cloudslab/fogbus2-game_of_life11 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife11/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife12/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life12: 6 | # image: fogbus2-game_of_life12 7 | image: cloudslab/fogbus2-game_of_life12 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife12/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife13/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life13: 6 | # image: fogbus2-game_of_life13 7 | image: cloudslab/fogbus2-game_of_life13 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife13/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife14/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life14: 6 | # image: fogbus2-game_of_life14 7 | image: cloudslab/fogbus2-game_of_life14 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife14/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife15/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life15: 6 | # image: fogbus2-game_of_life15 7 | image: cloudslab/fogbus2-game_of_life15 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife15/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife16/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life16: 6 | # image: fogbus2-game_of_life16 7 | image: cloudslab/fogbus2-game_of_life16 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife16/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife17/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life17: 6 | # image: fogbus2-game_of_life17 7 | image: cloudslab/fogbus2-game_of_life17 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife17/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife18/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life18: 6 | # image: fogbus2-game_of_life18 7 | image: cloudslab/fogbus2-game_of_life18 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife18/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife19/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life19: 6 | # image: fogbus2-game_of_life19 7 | image: cloudslab/fogbus2-game_of_life19 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife19/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife20/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life20: 6 | # image: fogbus2-game_of_life20 7 | image: cloudslab/fogbus2-game_of_life20 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife20/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife21/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life21: 6 | # image: fogbus2-game_of_life21 7 | image: cloudslab/fogbus2-game_of_life21 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife21/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife22/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life22: 6 | # image: fogbus2-game_of_life22 7 | image: cloudslab/fogbus2-game_of_life22 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife22/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife23/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life23: 6 | # image: fogbus2-game_of_life23 7 | image: cloudslab/fogbus2-game_of_life23 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife23/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife24/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life24: 6 | # image: fogbus2-game_of_life24 7 | image: cloudslab/fogbus2-game_of_life24 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife24/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife25/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life25: 6 | # image: fogbus2-game_of_life25 7 | image: cloudslab/fogbus2-game_of_life25 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife25/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife26/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life26: 6 | # image: fogbus2-game_of_life26 7 | image: cloudslab/fogbus2-game_of_life26 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife26/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife27/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life27: 6 | # image: fogbus2-game_of_life27 7 | image: cloudslab/fogbus2-game_of_life27 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife27/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife28/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life28: 6 | # image: fogbus2-game_of_life28 7 | image: cloudslab/fogbus2-game_of_life28 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife28/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife29/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life29: 6 | # image: fogbus2-game_of_life29 7 | image: cloudslab/fogbus2-game_of_life29 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife29/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife30/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life30: 6 | # image: fogbus2-game_of_life30 7 | image: cloudslab/fogbus2-game_of_life30 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife30/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife31/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life31: 6 | # image: fogbus2-game_of_life31 7 | image: cloudslab/fogbus2-game_of_life31 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife31/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife32/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life32: 6 | # image: fogbus2-game_of_life32 7 | image: cloudslab/fogbus2-game_of_life32 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife32/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife33/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life33: 6 | # image: fogbus2-game_of_life33 7 | image: cloudslab/fogbus2-game_of_life33 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife33/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife34/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life34: 6 | # image: fogbus2-game_of_life34 7 | image: cloudslab/fogbus2-game_of_life34 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife34/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife35/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life35: 6 | # image: fogbus2-game_of_life35 7 | image: cloudslab/fogbus2-game_of_life35 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife35/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife36/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life36: 6 | # image: fogbus2-game_of_life36 7 | image: cloudslab/fogbus2-game_of_life36 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife36/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife37/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life37: 6 | # image: fogbus2-game_of_life37 7 | image: cloudslab/fogbus2-game_of_life37 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife37/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife38/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life38: 6 | # image: fogbus2-game_of_life38 7 | image: cloudslab/fogbus2-game_of_life38 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife38/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife39/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life39: 6 | # image: fogbus2-game_of_life39 7 | image: cloudslab/fogbus2-game_of_life39 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife39/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife40/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life40: 6 | # image: fogbus2-game_of_life40 7 | image: cloudslab/fogbus2-game_of_life40 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife40/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife41/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life41: 6 | # image: fogbus2-game_of_life41 7 | image: cloudslab/fogbus2-game_of_life41 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife41/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife42/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life42: 6 | # image: fogbus2-game_of_life42 7 | image: cloudslab/fogbus2-game_of_life42 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife42/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife43/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life43: 6 | # image: fogbus2-game_of_life43 7 | image: cloudslab/fogbus2-game_of_life43 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife43/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife44/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life44: 6 | # image: fogbus2-game_of_life44 7 | image: cloudslab/fogbus2-game_of_life44 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife44/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife45/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life45: 6 | # image: fogbus2-game_of_life45 7 | image: cloudslab/fogbus2-game_of_life45 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife45/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife46/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life46: 6 | # image: fogbus2-game_of_life46 7 | image: cloudslab/fogbus2-game_of_life46 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife46/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife47/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life47: 6 | # image: fogbus2-game_of_life47 7 | image: cloudslab/fogbus2-game_of_life47 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife47/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife48/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life48: 6 | # image: fogbus2-game_of_life48 7 | image: cloudslab/fogbus2-game_of_life48 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife48/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife49/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life49: 6 | # image: fogbus2-game_of_life49 7 | image: cloudslab/fogbus2-game_of_life49 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife49/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife50/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life50: 6 | # image: fogbus2-game_of_life50 7 | image: cloudslab/fogbus2-game_of_life50 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife50/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife51/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life51: 6 | # image: fogbus2-game_of_life51 7 | image: cloudslab/fogbus2-game_of_life51 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife51/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife52/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life52: 6 | # image: fogbus2-game_of_life52 7 | image: cloudslab/fogbus2-game_of_life52 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife52/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife53/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life53: 6 | # image: fogbus2-game_of_life53 7 | image: cloudslab/fogbus2-game_of_life53 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife53/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife54/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life54: 6 | # image: fogbus2-game_of_life54 7 | image: cloudslab/fogbus2-game_of_life54 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife54/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife55/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life55: 6 | # image: fogbus2-game_of_life55 7 | image: cloudslab/fogbus2-game_of_life55 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife55/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife56/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life56: 6 | # image: fogbus2-game_of_life56 7 | image: cloudslab/fogbus2-game_of_life56 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife56/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife57/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life57: 6 | # image: fogbus2-game_of_life57 7 | image: cloudslab/fogbus2-game_of_life57 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife57/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife58/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life58: 6 | # image: fogbus2-game_of_life58 7 | image: cloudslab/fogbus2-game_of_life58 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife58/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife59/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life59: 6 | # image: fogbus2-game_of_life59 7 | image: cloudslab/fogbus2-game_of_life59 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife59/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife60/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life60: 6 | # image: fogbus2-game_of_life60 7 | image: cloudslab/fogbus2-game_of_life60 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife60/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/GameOfLife61/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-game_of_life61: 6 | # image: fogbus2-game_of_life61 7 | image: cloudslab/fogbus2-game_of_life61 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/GameOfLife61/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/BlurAndPHash/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-blur_and_p_hash: 6 | # image: fogbus2-blur_and_p_hash 7 | image: cloudslab/fogbus2-blur_and_p_hash 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/BlurAndPHash/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/ColorTracking/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-color_tracking: 6 | # image: fogbus2-color_tracking 7 | image: cloudslab/fogbus2-color_tracking 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/ColorTracking/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/dockerFiles/FaceDetection/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-face_detection: 6 | # image: fogbus2-face_detection 7 | image: cloudslab/fogbus2-face_detection 8 | build: 9 | context: ../../ 10 | dockerfile: dockerFiles/FaceDetection/Dockerfile 11 | environment: 12 | PUID: 1000 13 | PGID: 1000 14 | TZ: Australia/Melbourne 15 | network_mode: 16 | host 17 | 18 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/exceptions/message.py: -------------------------------------------------------------------------------- 1 | class MessageDoesNotContainSourceInfo(Exception): 2 | 3 | def __init__(self): 4 | super(MessageDoesNotContainSourceInfo, self).__init__( 5 | 'Message does not contain source information') 6 | 7 | 8 | class MessageDoesNotContainType(Exception): 9 | 10 | def __init__(self): 11 | super(MessageDoesNotContainType, self).__init__( 12 | 'Message does not contain Type') 13 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/exceptions/message.py: -------------------------------------------------------------------------------- 1 | class MessageDoesNotContainSourceInfo(Exception): 2 | 3 | def __init__(self): 4 | super(MessageDoesNotContainSourceInfo, self).__init__( 5 | 'Message does not contain source information') 6 | 7 | 8 | class MessageDoesNotContainType(Exception): 9 | 10 | def __init__(self): 11 | super(MessageDoesNotContainType, self).__init__( 12 | 'Message does not contain Type') 13 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/exceptions/message.py: -------------------------------------------------------------------------------- 1 | class MessageDoesNotContainSourceInfo(Exception): 2 | 3 | def __init__(self): 4 | super(MessageDoesNotContainSourceInfo, self).__init__( 5 | 'Message does not contain source information') 6 | 7 | 8 | class MessageDoesNotContainType(Exception): 9 | 10 | def __init__(self): 11 | super(MessageDoesNotContainType, self).__init__( 12 | 'Message does not contain Type') 13 | -------------------------------------------------------------------------------- /rebuild.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | set -e 3 | 4 | hostsFilename='hosts' 5 | 6 | handle(){ 7 | host=$1 8 | echo "$host"; 9 | ssh "$host" "cd ~/new/demo/ && python3.9 demo.py --buildAll"; 10 | echo "[======================]" 11 | echo "[*] $host done." 12 | echo "[======================]" 13 | } 14 | 15 | loop(){ 16 | hostsFilename=$1 17 | while read -r host; 18 | do 19 | handle "$host" 20 | done < "$hostsFilename" 21 | } 22 | 23 | loop "$hostsFilename" 24 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/logger/__init__.py: -------------------------------------------------------------------------------- 1 | from .allSystemPerformance import AllSystemPerformance 2 | from .manager import LoggerManager 3 | from .types import AllDataRate 4 | from .types import AllDelay 5 | from .types import AllImages 6 | from .types import AllLatency 7 | from .types import AllPacketSize 8 | from .types import AllProcessingTime 9 | from .types import AllResources 10 | from .types import AllResponseTime 11 | from .types import AllRunningContainers 12 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/exceptions/message.py: -------------------------------------------------------------------------------- 1 | class MessageDoesNotContainSourceInfo(Exception): 2 | 3 | def __init__(self): 4 | super(MessageDoesNotContainSourceInfo, self).__init__( 5 | 'Message does not contain source information') 6 | 7 | 8 | class MessageDoesNotContainType(Exception): 9 | 10 | def __init__(self): 11 | super(MessageDoesNotContainType, self).__init__( 12 | 'Message does not contain Type') 13 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/exceptions/message.py: -------------------------------------------------------------------------------- 1 | class MessageDoesNotContainSourceInfo(Exception): 2 | 3 | def __init__(self): 4 | super(MessageDoesNotContainSourceInfo, self).__init__( 5 | 'Message does not contain source information') 6 | 7 | 8 | class MessageDoesNotContainType(Exception): 9 | 10 | def __init__(self): 11 | super(MessageDoesNotContainType, self).__init__( 12 | 'Message does not contain Type') 13 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/pairsMedian.py: -------------------------------------------------------------------------------- 1 | from .sequenceMedian import SequenceMedian 2 | 3 | 4 | class PairsMedian(dict): 5 | 6 | def __missing__(self, key): 7 | self.__setitem__(key, SequenceMedian()) 8 | return self.__getitem__(key) 9 | 10 | def calculateAll(self): 11 | items = self.items() 12 | logFormat = {} 13 | for key, sequence in items: 14 | logFormat[key] = sequence.median() 15 | return logFormat 16 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/pairsMedian.py: -------------------------------------------------------------------------------- 1 | from .sequenceMedian import SequenceMedian 2 | 3 | 4 | class PairsMedian(dict): 5 | 6 | def __missing__(self, key): 7 | self.__setitem__(key, SequenceMedian()) 8 | return self.__getitem__(key) 9 | 10 | def calculateAll(self): 11 | items = self.items() 12 | logFormat = {} 13 | for key, sequence in items: 14 | logFormat[key] = sequence.median() 15 | return logFormat 16 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/remoteLogger/logger/__init__.py: -------------------------------------------------------------------------------- 1 | from .allSystemPerformance import AllSystemPerformance 2 | from .manager import LoggerManager 3 | from .types import AllDataRate 4 | from .types import AllDelay 5 | from .types import AllImages 6 | from .types import AllLatency 7 | from .types import AllPacketSize 8 | from .types import AllProcessingTime 9 | from .types import AllResources 10 | from .types import AllResponseTime 11 | from .types import AllRunningContainers 12 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/pairsMedian.py: -------------------------------------------------------------------------------- 1 | from .sequenceMedian import SequenceMedian 2 | 3 | 4 | class PairsMedian(dict): 5 | 6 | def __missing__(self, key): 7 | self.__setitem__(key, SequenceMedian()) 8 | return self.__getitem__(key) 9 | 10 | def calculateAll(self): 11 | items = self.items() 12 | logFormat = {} 13 | for key, sequence in items: 14 | logFormat[key] = sequence.median() 15 | return logFormat 16 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/pairsMedian.py: -------------------------------------------------------------------------------- 1 | from .sequenceMedian import SequenceMedian 2 | 3 | 4 | class PairsMedian(dict): 5 | 6 | def __missing__(self, key): 7 | self.__setitem__(key, SequenceMedian()) 8 | return self.__getitem__(key) 9 | 10 | def calculateAll(self): 11 | items = self.items() 12 | logFormat = {} 13 | for key, sequence in items: 14 | logFormat[key] = sequence.median() 15 | return logFormat 16 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/naiveFormula2.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class NaiveFormula2(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=110, taskName='NaiveFormula2') 7 | 8 | def exec(self, inputData): 9 | a = inputData['a'] 10 | b = inputData['b'] 11 | c = inputData['c'] 12 | 13 | result = 1 / a + 2 / b + 3 / c 14 | inputData['resultPart2'] = result 15 | return inputData 16 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/pairsMedian.py: -------------------------------------------------------------------------------- 1 | from .sequenceMedian import SequenceMedian 2 | 3 | 4 | class PairsMedian(dict): 5 | 6 | def __missing__(self, key): 7 | self.__setitem__(key, SequenceMedian()) 8 | return self.__getitem__(key) 9 | 10 | def calculateAll(self): 11 | items = self.items() 12 | logFormat = {} 13 | for key, sequence in items: 14 | logFormat[key] = sequence.median() 15 | return logFormat 16 | -------------------------------------------------------------------------------- /containers/actor/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-actor: 6 | # image: fogbus2-actor 7 | image: cloudslab/fogbus2-actor 8 | build: 9 | context: ./ 10 | dockerfile: ./Dockerfile 11 | volumes: 12 | - /var/run/docker.sock:/var/run/docker.sock 13 | environment: 14 | PUID: 1000 15 | PGID: 1000 16 | TZ: Australia/Melbourne 17 | PYTHONUNBUFFERED: 0 18 | network_mode: 19 | host 20 | restart: unless-stopped 21 | 22 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/message/type.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageType(Enum): 7 | NONE = '' 8 | EXPERIMENTAL = 'experimental' 9 | ACKNOWLEDGEMENT = 'acknowledgement' 10 | DATA = 'data' 11 | LOG = 'log' 12 | PLACEMENT = 'placement' 13 | PROFILING = 'profiling' 14 | REGISTRATION = 'registration' 15 | RESOURCE_DISCOVERY = 'resourceDiscovery' 16 | SCALING = 'scaling' 17 | TERMINATION = 'termination' 18 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/message/type.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageType(Enum): 7 | NONE = '' 8 | EXPERIMENTAL = 'experimental' 9 | ACKNOWLEDGEMENT = 'acknowledgement' 10 | DATA = 'data' 11 | LOG = 'log' 12 | PLACEMENT = 'placement' 13 | PROFILING = 'profiling' 14 | REGISTRATION = 'registration' 15 | RESOURCE_DISCOVERY = 'resourceDiscovery' 16 | SCALING = 'scaling' 17 | TERMINATION = 'termination' 18 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/message/type.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageType(Enum): 7 | NONE = '' 8 | EXPERIMENTAL = 'experimental' 9 | ACKNOWLEDGEMENT = 'acknowledgement' 10 | DATA = 'data' 11 | LOG = 'log' 12 | PLACEMENT = 'placement' 13 | PROFILING = 'profiling' 14 | REGISTRATION = 'registration' 15 | RESOURCE_DISCOVERY = 'resourceDiscovery' 16 | SCALING = 'scaling' 17 | TERMINATION = 'termination' 18 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/basic/autoDictionary.py: -------------------------------------------------------------------------------- 1 | class AutoDictionary: 2 | 3 | def _dict(self): 4 | publicItems = {} 5 | 6 | for key, value in self.__dict__.items(): 7 | if '_' == key[0]: 8 | continue 9 | publicItems[key] = value 10 | return publicItems 11 | 12 | def __repr__(self): 13 | return self._dict().__repr__() 14 | 15 | def __iter__(self): 16 | for k, v in self._dict().items(): 17 | yield k, v 18 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/basic/autoDictionary.py: -------------------------------------------------------------------------------- 1 | class AutoDictionary: 2 | 3 | def _dict(self): 4 | publicItems = {} 5 | 6 | for key, value in self.__dict__.items(): 7 | if '_' == key[0]: 8 | continue 9 | publicItems[key] = value 10 | return publicItems 11 | 12 | def __repr__(self): 13 | return self._dict().__repr__() 14 | 15 | def __iter__(self): 16 | for k, v in self._dict().items(): 17 | yield k, v 18 | -------------------------------------------------------------------------------- /containers/database/mariadb/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | services: 4 | mariadb: 5 | image: "mariadb:10.5.9" 6 | volumes: 7 | - ${MYSQL_DIR}:/var/lib/mysql/ 8 | environment: 9 | TZ: Australia/Melbourne 10 | MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 11 | MYSQL_DATABASE: ${MYSQL_DATABASE} 12 | MYSQL_USER: ${MYSQL_USER} 13 | MYSQL_PASSWORD: ${MYSQL_PASSWORD} 14 | MYSQL_HOST: ${MYSQL_HOST} 15 | ports: 16 | - 3306:3306 17 | restart: unless-stopped 18 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/basic/autoDictionary.py: -------------------------------------------------------------------------------- 1 | class AutoDictionary: 2 | 3 | def _dict(self): 4 | publicItems = {} 5 | 6 | for key, value in self.__dict__.items(): 7 | if '_' == key[0]: 8 | continue 9 | publicItems[key] = value 10 | return publicItems 11 | 12 | def __repr__(self): 13 | return self._dict().__repr__() 14 | 15 | def __iter__(self): 16 | for k, v in self._dict().items(): 17 | yield k, v 18 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/message/type.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageType(Enum): 7 | NONE = '' 8 | EXPERIMENTAL = 'experimental' 9 | ACKNOWLEDGEMENT = 'acknowledgement' 10 | DATA = 'data' 11 | LOG = 'log' 12 | PLACEMENT = 'placement' 13 | PROFILING = 'profiling' 14 | REGISTRATION = 'registration' 15 | RESOURCE_DISCOVERY = 'resourceDiscovery' 16 | SCALING = 'scaling' 17 | TERMINATION = 'termination' 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/message/type.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | from enum import unique 3 | 4 | 5 | @unique 6 | class MessageType(Enum): 7 | NONE = '' 8 | EXPERIMENTAL = 'experimental' 9 | ACKNOWLEDGEMENT = 'acknowledgement' 10 | DATA = 'data' 11 | LOG = 'log' 12 | PLACEMENT = 'placement' 13 | PROFILING = 'profiling' 14 | REGISTRATION = 'registration' 15 | RESOURCE_DISCOVERY = 'resourceDiscovery' 16 | SCALING = 'scaling' 17 | TERMINATION = 'termination' 18 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/basic/autoDictionary.py: -------------------------------------------------------------------------------- 1 | class AutoDictionary: 2 | 3 | def _dict(self): 4 | publicItems = {} 5 | 6 | for key, value in self.__dict__.items(): 7 | if '_' == key[0]: 8 | continue 9 | publicItems[key] = value 10 | return publicItems 11 | 12 | def __repr__(self): 13 | return self._dict().__repr__() 14 | 15 | def __iter__(self): 16 | for k, v in self._dict().items(): 17 | yield k, v 18 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/basic/autoDictionary.py: -------------------------------------------------------------------------------- 1 | class AutoDictionary: 2 | 3 | def _dict(self): 4 | publicItems = {} 5 | 6 | for key, value in self.__dict__.items(): 7 | if '_' == key[0]: 8 | continue 9 | publicItems[key] = value 10 | return publicItems 11 | 12 | def __repr__(self): 13 | return self._dict().__repr__() 14 | 15 | def __iter__(self): 16 | for k, v in self._dict().items(): 17 | yield k, v 18 | -------------------------------------------------------------------------------- /demo/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .componentRunner import ActorRunner 2 | from .componentRunner import MasterRunner 3 | from .componentRunner import RemoteLoggerRunner 4 | from .componentRunner import UserRunner 5 | from .imageBuilder import ActorImageBuilder 6 | from .imageBuilder import MasterImageBuilder 7 | from .imageBuilder import RemoteLoggerImageBuilder 8 | from .imageBuilder import TaskExecutorImageBuilder 9 | from .imageBuilder import UserImageBuilder 10 | from .remoteHost import RemoteHost 11 | from .tools import newDebugLogger 12 | -------------------------------------------------------------------------------- /containers/user/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-user: 6 | # image: fogbus2-user 7 | image: cloudslab/fogbus2-user 8 | build: 9 | context: ./ 10 | dockerfile: ./Dockerfile 11 | volumes: 12 | - ./sources:/workplace 13 | - /var/run/docker.sock:/var/run/docker.sock 14 | environment: 15 | PUID: 1000 16 | PGID: 1000 17 | TZ: Australia/Melbourne 18 | privileged: true 19 | network_mode: 20 | host 21 | restart: unless-stopped 22 | 23 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/registered/users.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .base import Registered 4 | from ..roles import User 5 | 6 | UserKey = Union[User, str] 7 | 8 | 9 | class RegisteredUsers(Registered): 10 | pass 11 | 12 | def __setitem__(self, key, user: User): 13 | return self._setitem(key=key, component=user) 14 | 15 | def __contains__(self, userOrStr: UserKey): 16 | return self._contains(userOrStr) 17 | 18 | def __getitem__(self, key: UserKey) -> User: 19 | return self._getitem(key) 20 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/remoteLogger/__init__.py: -------------------------------------------------------------------------------- 1 | from .config import MySQLEnvironment 2 | from .logger import AllDataRate 3 | from .logger import AllDelay 4 | from .logger import AllImages 5 | from .logger import AllLatency 6 | from .logger import AllPacketSize 7 | from .logger import AllProcessingTime 8 | from .logger import AllResources 9 | from .logger import AllResponseTime 10 | from .logger import AllRunningContainers 11 | from .logger import AllSystemPerformance 12 | from .logger import LoggerManager 13 | from .messageHandler import RemoteLoggerMessageHandler 14 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/applications/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import ApplicationUserSide 2 | from .colorTracking import ColorTracking 3 | from .faceAndEyeDetection import FaceAndEyeDetection 4 | from .faceDetection import FaceDetection 5 | from .gameOfLifeParallelized import GameOfLifeParallelized 6 | from .gameOfLifePyramid import GameOfLifePyramid 7 | from .gameOfLifeSerialized import GameOfLifeSerialized 8 | from .naiveFormulaParallelized import NaiveFormulaParallelized 9 | from .naiveFormulaSerialized import NaiveFormulaSerialized 10 | from .videoOCR import VideoOCR 11 | -------------------------------------------------------------------------------- /containers/remoteLogger/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-remote_logger: 6 | # image: fogbus2-remote_logger # Use this for local image 7 | image: cloudslab/fogbus2-remote_logger 8 | build: 9 | context: ./ 10 | dockerfile: ./Dockerfile 11 | volumes: 12 | - /var/run/docker.sock:/var/run/docker.sock 13 | - ./sources/.mysql.env:/workplace/.mysql.env 14 | environment: 15 | PUID: 1000 16 | PGID: 1000 17 | TZ: Australia/Melbourne 18 | network_mode: 19 | host 20 | restart: unless-stopped 21 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/registry/registered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from .base import Registered 4 | from ..roles import Master 5 | 6 | MasterKey = Union[Master, str] 7 | 8 | 9 | class RegisteredMasters(Registered): 10 | pass 11 | 12 | def __setitem__(self, key, master: Master): 13 | return self._setitem(key=key, component=master) 14 | 15 | def __contains__(self, masterOrStr: MasterKey): 16 | return self._contains(masterOrStr) 17 | 18 | def __getitem__(self, key: MasterKey) -> Master: 19 | return self._getitem(key) 20 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/naiveFormula0.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class NaiveFormula0(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=108, taskName='NaiveFormula0') 7 | 8 | def exec(self, inputData): 9 | a = inputData['a'] 10 | b = inputData['b'] 11 | c = inputData['c'] 12 | 13 | result = a + b + c 14 | inputData['resultPart0'] = result 15 | 16 | inputData['a'] += 1 17 | inputData['b'] += 1 18 | inputData['c'] += 1 19 | 20 | return inputData 21 | -------------------------------------------------------------------------------- /containers/user/sources/utils/types/decorator/loopSourceDestination.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing import Callable 3 | from typing import Dict 4 | 5 | 6 | class LoopSourceDestination: 7 | 8 | def __init__(self, f): 9 | pass 10 | 11 | def __call__(self, *args, **kwargs): 12 | dictInDict: Dict[str, Dict[str, Any]] = kwargs['dictInDict'] 13 | runner: Callable = kwargs['runner'] 14 | for source, destinations in dictInDict.items(): 15 | for destination, data in destinations.items(): 16 | runner(source, destination, data) 17 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/types/decorator/loopSourceDestination.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing import Callable 3 | from typing import Dict 4 | 5 | 6 | class LoopSourceDestination: 7 | 8 | def __init__(self, f): 9 | pass 10 | 11 | def __call__(self, *args, **kwargs): 12 | dictInDict: Dict[str, Dict[str, Any]] = kwargs['dictInDict'] 13 | runner: Callable = kwargs['runner'] 14 | for source, destinations in dictInDict.items(): 15 | for destination, data in destinations.items(): 16 | runner(source, destination, data) 17 | -------------------------------------------------------------------------------- /containers/master/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | fogbus2-master: 6 | # image: fogbus2-master 7 | image: cloudslab/fogbus2-master 8 | build: 9 | context: ./ 10 | dockerfile: ./Dockerfile 11 | volumes: 12 | - /var/run/docker.sock:/var/run/docker.sock 13 | - ./sources/:/workplace/ 14 | - ./sources/.mysql.env:/workplace/.mysql.env 15 | environment: 16 | PUID: 1000 17 | PGID: 1000 18 | TZ: Australia/Melbourne 19 | PYTHONUNBUFFERED: 0 20 | network_mode: 21 | host 22 | restart: unless-stopped 23 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/messageHandler/tools/waitMessage.py: -------------------------------------------------------------------------------- 1 | from ...registry.roles.taskExecutor import TaskExecutor 2 | 3 | from ....connection import MessageToSend 4 | from ....types import MessageSubType 5 | from ....types import MessageType 6 | 7 | 8 | def waitMessage(taskExecutor: TaskExecutor) -> MessageToSend: 9 | messageToSend = MessageToSend( 10 | messageType=MessageType.ACKNOWLEDGEMENT, 11 | messageSubType=MessageSubType.WAIT, 12 | data={'waitTimeout': taskExecutor.waitTimeout}, 13 | destination=taskExecutor) 14 | return messageToSend 15 | -------------------------------------------------------------------------------- /containers/master/sources/utils/types/decorator/loopSourceDestination.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing import Callable 3 | from typing import Dict 4 | 5 | 6 | class LoopSourceDestination: 7 | 8 | def __init__(self, f): 9 | pass 10 | 11 | def __call__(self, *args, **kwargs): 12 | dictInDict: Dict[str, Dict[str, Any]] = kwargs['dictInDict'] 13 | runner: Callable = kwargs['runner'] 14 | for source, destinations in dictInDict.items(): 15 | for destination, data in destinations.items(): 16 | runner(source, destination, data) 17 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/types/decorator/loopSourceDestination.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing import Callable 3 | from typing import Dict 4 | 5 | 6 | class LoopSourceDestination: 7 | 8 | def __init__(self, f): 9 | pass 10 | 11 | def __call__(self, *args, **kwargs): 12 | dictInDict: Dict[str, Dict[str, Any]] = kwargs['dictInDict'] 13 | runner: Callable = kwargs['runner'] 14 | for source, destinations in dictInDict.items(): 15 | for destination, data in destinations.items(): 16 | runner(source, destination, data) 17 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/types/decorator/loopSourceDestination.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing import Callable 3 | from typing import Dict 4 | 5 | 6 | class LoopSourceDestination: 7 | 8 | def __init__(self, f): 9 | pass 10 | 11 | def __call__(self, *args, **kwargs): 12 | dictInDict: Dict[str, Dict[str, Any]] = kwargs['dictInDict'] 13 | runner: Callable = kwargs['runner'] 14 | for source, destinations in dictInDict.items(): 15 | for destination, data in destinations.items(): 16 | runner(source, destination, data) 17 | -------------------------------------------------------------------------------- /containers/user/sources/utils/user/__init__.py: -------------------------------------------------------------------------------- 1 | from .applications import ApplicationUserSide 2 | from .applications import ColorTracking 3 | from .applications import FaceAndEyeDetection 4 | from .applications import FaceDetection 5 | from .applications import GameOfLifeParallelized 6 | from .applications import GameOfLifePyramid 7 | from .applications import GameOfLifeSerialized 8 | from .applications import GameOfLifeSerialized 9 | from .messageHandler import UserMessageHandler 10 | from .registration import RegistrationManager 11 | from .tools import initActuator 12 | from .window import WindowManager 13 | -------------------------------------------------------------------------------- /upload.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | set -e 3 | 4 | hostsFilename='hosts' 5 | 6 | handle() { 7 | host=$1 8 | echo "$host" 9 | scp code.tar "$host:" 10 | ssh "$host" "mkdir -p ~/fogbus2 && tar xf ~/code.tar --exclude='containers/database/mariadb/mysql' -C ~/fogbus2" < /dev/null; 11 | # ssh "$host" "mkdir -p ~/fogbus2 && tar xf ~/code.tar -C ~/fogbus2" 12 | echo "[*] $host done." 13 | } 14 | 15 | loop() { 16 | hostsFilename=$1 17 | while read -r host; do 18 | handle "$host" 19 | done <"$hostsFilename" 20 | } 21 | 22 | git archive -o code.tar HEAD --format=tar 23 | 24 | loop "$hostsFilename" 25 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/actors.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigActor 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigActor.portRange 8 | _actorPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredActors(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _actorPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.ACTOR, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/messageHandler/logHandler.py: -------------------------------------------------------------------------------- 1 | from ..logger import LoggerManager 2 | from ...connection import HandlerReturn 3 | from ...connection import MessageReceived 4 | 5 | 6 | class LogHandler: 7 | 8 | def __init__(self, loggerManager: LoggerManager): 9 | self.loggerManager = loggerManager 10 | 11 | def handleProfiles(self, message: MessageReceived) -> HandlerReturn: 12 | profiles = message.data['profiles'] 13 | imagesToMerge = {message.source.nameConsistent: profiles} 14 | self.loggerManager.mergeImages(imagesToMerge) 15 | return 16 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/actors.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigActor 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigActor.portRange 8 | _actorPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredActors(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _actorPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.ACTOR, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/taskExecutor/tasks/naiveFormula1.py: -------------------------------------------------------------------------------- 1 | from .base import BaseTask 2 | 3 | 4 | class NaiveFormula1(BaseTask): 5 | def __init__(self): 6 | super().__init__(taskID=109, taskName='NaiveFormula1') 7 | 8 | def exec(self, inputData): 9 | a = inputData['a'] 10 | b = inputData['b'] 11 | c = inputData['c'] 12 | 13 | result = a * a / (b * b + c * c) 14 | inputData['resultPart1'] = result 15 | 16 | inputData['a'] += 1 17 | inputData['b'] += 1 18 | inputData['c'] += 1 19 | 20 | return inputData 21 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/discovered/actors.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigActor 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigActor.portRange 8 | _actorPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredActors(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _actorPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.ACTOR, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigMaster 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigMaster.portRange 8 | _masterPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredMasters(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _masterPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.MASTER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigMaster 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigMaster.portRange 8 | _masterPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredMasters(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _masterPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.MASTER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/discovered/actors.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigActor 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigActor.portRange 8 | _actorPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredActors(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _actorPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.ACTOR, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/discovered/actors.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigActor 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigActor.portRange 8 | _actorPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredActors(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _actorPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.ACTOR, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/user/sources/utils/resourceDiscovery/discovered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigMaster 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigMaster.portRange 8 | _masterPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredMasters(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _masterPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.MASTER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/database/base.py: -------------------------------------------------------------------------------- 1 | from abc import abstractmethod 2 | from typing import List 3 | 4 | from ..base import Application 5 | from ..task.base import Task 6 | 7 | 8 | class BaseDatabase: 9 | @abstractmethod 10 | def readTasks(self) -> List[Task]: 11 | pass 12 | 13 | @abstractmethod 14 | def writeTask(self, task: Task): 15 | pass 16 | 17 | @abstractmethod 18 | def readApplications(self) -> List[Application]: 19 | pass 20 | 21 | @abstractmethod 22 | def writeApplication(self, application: Application): 23 | pass 24 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/application/task/dependency/base.py: -------------------------------------------------------------------------------- 1 | from typing import Set 2 | 3 | from ..base import Task 4 | 5 | 6 | class TaskWithDependency(Task): 7 | 8 | def __init__( 9 | self, 10 | name: str, 11 | parents: Set[Task] = None, 12 | children: Set[Task] = None): 13 | Task.__init__( 14 | self, 15 | name=name) 16 | if parents is None: 17 | parents = set() 18 | if children is None: 19 | children = set() 20 | self.parents = parents 21 | self.children = children 22 | -------------------------------------------------------------------------------- /containers/remoteLogger/sources/utils/resourceDiscovery/discovered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigMaster 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigMaster.portRange 8 | _masterPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredMasters(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _masterPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.MASTER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/taskExecutor/sources/utils/resourceDiscovery/discovered/masters.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigMaster 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigMaster.portRange 8 | _masterPortRange: Tuple[int, int] = (_portRange[0], _portRange[1] + 1) 9 | 10 | 11 | class DiscoveredMasters(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _masterPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.MASTER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/master/sources/requirements.txt: -------------------------------------------------------------------------------- 1 | autograd==1.3 2 | certifi==2021.5.30 3 | charset-normalizer==2.0.4 4 | cma==2.7.0 5 | cx-Oracle==8.2.1 6 | cycler==0.10.0 7 | docker==5.0.0 8 | future==0.18.2 9 | GPUtil==1.4.0 10 | idna==3.2 11 | iperf3==0.1.11 12 | kiwisolver==1.3.1 13 | matplotlib==3.4.2 14 | mysql-connector-python==8.0.26 15 | numpy==1.22.2 16 | Pillow==9.0.1 17 | protobuf==3.17.3 18 | psutil==5.8.0 19 | pymoo==0.4.2.2 20 | pyparsing==2.4.7 21 | python-dateutil==2.8.2 22 | python-dotenv==0.19.0 23 | pythonping==1.1.0 24 | requests==2.26.0 25 | scipy==1.6.3 26 | six==1.16.0 27 | urllib3==1.26.6 28 | websocket-client==1.1.0 29 | -------------------------------------------------------------------------------- /containers/master/sources/utils/master/messageHandler/__init__.py: -------------------------------------------------------------------------------- 1 | from .acknowledgementHandler import AcknowledgementHandler 2 | from .baseHandler import MasterMessageHandler 3 | from .dataHandler import DataHandler 4 | from .experimentalHandler import ExperimentalHandler 5 | from .logHandler import LogHandler 6 | from .placementHandler import PlacementHandler 7 | from .profilingHandler import ProfilingHandler 8 | from .registrationHandler import RegistrationHandler 9 | from .resourcesDiscoveryHandler import ResourcesDiscoveryHandler 10 | from .scalingHandler import ScalingHandler 11 | from .terminationHandler import TerminationHandler 12 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/actor/initiator/base.py: -------------------------------------------------------------------------------- 1 | from docker.client import DockerClient 2 | 3 | from ...component.basic import BasicComponent 4 | 5 | 6 | class BaseInitiator: 7 | 8 | def __init__( 9 | self, 10 | basicComponent: BasicComponent, 11 | isContainerMode: bool, 12 | dockerClient: DockerClient = None): 13 | self.basicComponent = basicComponent 14 | if dockerClient is not None: 15 | isContainerMode = True 16 | if not isContainerMode: 17 | return 18 | self.dockerClient = dockerClient 19 | self.me = self.basicComponent.me 20 | -------------------------------------------------------------------------------- /containers/actor/sources/utils/resourceDiscovery/discovered/remoteLoggers.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigRemoteLogger 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigRemoteLogger.portRange 8 | _remoteLoggerPortRange: Tuple[int, int] = (_portRange[0], _portRange[1]) 9 | 10 | 11 | class DiscoveredRemoteLoggers(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _remoteLoggerPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.REMOTE_LOGGER, 17 | portRange= 18 | portRange) 19 | -------------------------------------------------------------------------------- /containers/master/sources/utils/resourceDiscovery/discovered/remoteLoggers.py: -------------------------------------------------------------------------------- 1 | from typing import Tuple 2 | 3 | from .base import Discovered 4 | from ...config import ConfigRemoteLogger 5 | from ...types import ComponentRole 6 | 7 | _portRange = ConfigRemoteLogger.portRange 8 | _remoteLoggerPortRange: Tuple[int, int] = (_portRange[0], _portRange[1]) 9 | 10 | 11 | class DiscoveredRemoteLoggers(Discovered): 12 | 13 | def __init__(self, portRange: Tuple[int, int] = _remoteLoggerPortRange): 14 | Discovered.__init__( 15 | self, 16 | role=ComponentRole.REMOTE_LOGGER, 17 | portRange= 18 | portRange) 19 | --------------------------------------------------------------------------------