diff --git a/Dockerfile b/Dockerfile index 64d37ca2..8a5e72b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG PROJECT_NAME=jobs # COMPOSER_TOKEN can also be passed via the COMPOSER_GITHUB_TOKEN file ARG COMPOSER_TOKEN=placeholder_token_you_must_replace_via_args_in_compose_file -ARG INSTALL_XDEBUG=false +ARG INSTALL_XDEBUG=true ARG COMPOSER_INSTALL=true ENV PROJECT_DIR=/var/www/html/${PROJECT_NAME}.neighborhoods.com @@ -17,12 +17,13 @@ COPY . $PROJECT_DIR # Copy xdebug configration for remote debugging COPY docker/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +COPY docker/bwilson.ini /usr/local/etc/php/conf.d/bwilson.ini RUN bash docker/build.sh \ --composer-token ${COMPOSER_TOKEN} \ --xdebug ${INSTALL_XDEBUG} \ --composer-install ${COMPOSER_INSTALL} -CMD ["php-fpm"] +#CMD ["php-fpm"] EXPOSE 9000 diff --git a/README.md b/README.md index 0a9c045e..ba5a7688 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,16 @@ -# nhds/jobs -A Distributed Task Manager +# ⚡ Neighborhoods Kōjō ⚡ +# 工場 +A distributed task manager. -* Including `NHDS\Jobs` with your project with composer -```bash -$ composer require nhds/jobs -``` - -* Running the `NHDS\Jobs` service -```bash -$ vendor/bin/jobs process:pool:server:start $PWD/PATH/TO/services.yaml -``` +### `Kōjō` is a collection of the following components: +* Distributed task management. +* Distributed, cooperative, process-aware semaphores and mutex's. +* Static cron scheduling. +* Multi-process model. +* Status system. +* Distributed IPC. -* Running an exmaple +### Example usage ```bash -$ vendor/bin/phpunit --filter Foreman -$ vendor/bin/jobs process:pool:server:start $PWD/example/config/root.yaml -``` +$ bin/kojo process:pool:server:start $PWD/example +``` \ No newline at end of file diff --git a/bin/kojo b/bin/kojo new file mode 100755 index 00000000..3ca4df93 --- /dev/null +++ b/bin/kojo @@ -0,0 +1,55 @@ +#!/usr/bin/env php +getMessage(); + exit(1); +} +$containerBuilderFacade = new Facade(); +$discoverableDirectories[] = __DIR__ . '/../src'; +$finder = new Finder(); +$finder->name('*.yml'); +if (isset($argv[2]) && is_string($argv[2]) && is_dir($argv[2])) { + $discoverableDirectories[] = $argv[2]; +}elseif (isset($argv[1]) && is_string($argv[1]) && $argv[1] === Start::OPT_RUN_SERVER) { + foreach ($argv as $argument) { + if (strstr($argument, Start::OPT_YSDP) !== false) { + $ymlServicesFilePath = explode(Start::OPT_YSDP, $argument); + $discoverableDirectories[] = $ymlServicesFilePath[1]; + } + } + $finder->files()->in($discoverableDirectories); + $containerBuilderFacade->addFinder($finder); + $server = $containerBuilderFacade->getContainerBuilder()->get('process.pool.server'); + $server->setParentProcessPath(''); + $server->start(); + exit(); +} +$finder->files()->in($discoverableDirectories); +$containerBuilderFacade->addFinder($finder); +$containerBuilder = $containerBuilderFacade->getContainerBuilder(); +$consoleApplication = $containerBuilder->get('neighborhoods.kojo.symfony.component.console.application'); +$consoleApplication->run(); + +return; \ No newline at end of file diff --git a/composer.json b/composer.json index d6619f64..74393b74 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { - "name": "nhds/jobs", + "name": "neighborhoods/kojo", "type": "library", - "description": "NHDS Jobs is meant to solve the problem of easily writing distributed, fast, fault tolerant tasks.", + "description": "Neighborhoods Kōjō is a distributed task manager.", "license": "proprietary", "keywords": [], "authors": [ @@ -10,38 +10,44 @@ "email": "brad.wilson@neighborhoods.com" } ], + "repositories": [ + { + "type": "composer", + "url": "https://satis.neighborhoods.com" + } + ], "require": { "php": ">=7.1", + "symfony/filesystem": "^4.0", + "symfony/config": "^4.0", + "symfony/yaml": "^4.0", + "symfony/dependency-injection": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/cache": "^4.0", + "symfony/console": "^4.0", + "symfony/finder": "^4.0", "zendframework/zend-db": "^2.8", "dragonmantank/cron-expression": "^2.0", - "symfony/filesystem": "~4.0.3", - "symfony/config": "~4.0.3", - "symfony/yaml": "~4.0.3", - "symfony/dependency-injection": "~4.0.3", - "symfony/expression-language": "~4.0.3", - "symfony/cache": "~4.0.3", - "symfony/console": "~4.0.3" + "ocramius/proxy-manager": "^2.1", + "neighborhoods/pylon": "dev-master" }, "require-dev": { - "phpunit/phpunit": "^6.4", - "phpunit/dbunit": "^3.0", - "symfony/finder": "^4.0" + "phpunit/phpunit": "^7.0", + "phpunit/dbunit": "^4.0", + "neighborhoods/scaffolding": "dev-master" }, "bin": [ - "src/bin/jobs", - "src/bin/server" + "bin/kojo" ], "autoload": { "psr-4": { - "NHDS\\Jobs\\": "src", - "NHDS\\Toolkit\\": "nhdstoolkitsrc" + "Neighborhoods\\Kojo\\": "src" } }, "autoload-dev": { "psr-4": { - "NHDS\\Jobs\\Test\\": "tests", - "NHDS\\Watch\\": "nhdswatchsrc", - "NHDS\\Jobs\\Example\\": "example" + "Neighborhoods\\Kojo\\Test\\": "tests", + "Neighborhoods\\Kojo\\Example\\": "example" } } } \ No newline at end of file diff --git a/composer.lock b/composer.lock index 89914db6..387b8cce 100644 --- a/composer.lock +++ b/composer.lock @@ -4,27 +4,27 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "f7cf05b6dafa72c1ea53e8c6286187ec", + "content-hash": "8ab4eba30edc2b648550deb3e48a2b3d", "packages": [ { "name": "dragonmantank/cron-expression", - "version": "v2.0.0", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b" + "reference": "3f00985deec8df53d4cc1e5c33619bda1ee309a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8a84aee649c3a3ba03a721c1fb080e08dfbcd68b", - "reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/3f00985deec8df53d4cc1e5c33619bda1ee309a5", + "reference": "3f00985deec8df53d4cc1e5c33619bda1ee309a5", "shasum": "" }, "require": { "php": ">=7.0.0" }, "require-dev": { - "phpunit/phpunit": "~5.7" + "phpunit/phpunit": "~6.4" }, "type": "library", "autoload": { @@ -53,7 +53,163 @@ "cron", "schedule" ], - "time": "2017-10-12T15:59:13+00:00" + "time": "2018-04-06T15:51:55+00:00" + }, + { + "name": "neighborhoods/pylon", + "version": "dev-master", + "source": { + "type": "git", + "url": "git@github.com:neighborhoods/pylon.git", + "reference": "395e9d30b4ef5ba3e117851be97587464fc101e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/neighborhoods/pylon/zipball/395e9d30b4ef5ba3e117851be97587464fc101e3", + "reference": "395e9d30b4ef5ba3e117851be97587464fc101e3", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/config": "^4.0", + "symfony/dependency-injection": "^4.0", + "symfony/finder": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Neighborhoods\\Pylon\\": "src" + } + }, + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "Brad Wilson", + "email": "brad.wilson@neighborhoods.com" + } + ], + "description": "Neighborhoods Pylon is a collection of useful, but most importantly, generic objects.", + "time": "2018-04-18T19:29:35+00:00" + }, + { + "name": "ocramius/package-versions", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/PackageVersions.git", + "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", + "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0.0", + "php": "^7.1.0" + }, + "require-dev": { + "composer/composer": "^1.6.3", + "ext-zip": "*", + "infection/infection": "^0.7.1", + "phpunit/phpunit": "^7.0.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "time": "2018-02-05T13:05:30+00:00" + }, + { + "name": "ocramius/proxy-manager", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/ProxyManager.git", + "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/e18ac876b2e4819c76349de8f78ccc8ef1554cd7", + "reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7", + "shasum": "" + }, + "require": { + "ocramius/package-versions": "^1.1.1", + "php": "^7.1.0", + "zendframework/zend-code": "^3.1.0" + }, + "require-dev": { + "couscous/couscous": "^1.5.2", + "ext-phar": "*", + "humbug/humbug": "dev-master@DEV", + "nikic/php-parser": "^3.0.4", + "phpbench/phpbench": "^0.12.2", + "phpstan/phpstan": "^0.6.4", + "phpunit/phpunit": "^5.6.4", + "phpunit/phpunit-mock-objects": "^3.4.1", + "squizlabs/php_codesniffer": "^2.7.0" + }, + "suggest": { + "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", + "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", + "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", + "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "ProxyManager\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.io/" + } + ], + "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", + "homepage": "https://github.com/Ocramius/ProxyManager", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "time": "2017-05-04T11:12:50+00:00" }, { "name": "psr/cache", @@ -199,16 +355,16 @@ }, { "name": "psr/simple-cache", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { @@ -243,20 +399,20 @@ "psr-16", "simple-cache" ], - "time": "2017-01-02T13:31:39+00:00" + "time": "2017-10-23T01:57:42+00:00" }, { "name": "symfony/cache", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "1ebe207de664355b1699d35b12b0563c38a47b4e" + "reference": "681c245e629409a2f1ded6bf783e833d291d8af2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/1ebe207de664355b1699d35b12b0563c38a47b4e", - "reference": "1ebe207de664355b1699d35b12b0563c38a47b4e", + "url": "https://api.github.com/repos/symfony/cache/zipball/681c245e629409a2f1ded6bf783e833d291d8af2", + "reference": "681c245e629409a2f1ded6bf783e833d291d8af2", "shasum": "" }, "require": { @@ -312,20 +468,20 @@ "caching", "psr6" ], - "time": "2018-01-03T17:15:19+00:00" + "time": "2018-04-02T14:35:51+00:00" }, { "name": "symfony/config", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "0e86d267db0851cf55f339c97df00d693fe8592f" + "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/0e86d267db0851cf55f339c97df00d693fe8592f", - "reference": "0e86d267db0851cf55f339c97df00d693fe8592f", + "url": "https://api.github.com/repos/symfony/config/zipball/7c19370ab04e9ac05b74a504198e165f5ccf6dd8", + "reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8", "shasum": "" }, "require": { @@ -336,6 +492,8 @@ "symfony/finder": "<3.4" }, "require-dev": { + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", "symfony/finder": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, @@ -372,20 +530,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-03-19T22:35:49+00:00" }, { "name": "symfony/console", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fe0e69d7162cba0885791cf7eea5f0d7bc0f897e" + "reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fe0e69d7162cba0885791cf7eea5f0d7bc0f897e", - "reference": "fe0e69d7162cba0885791cf7eea5f0d7bc0f897e", + "url": "https://api.github.com/repos/symfony/console/zipball/aad9a6fe47319f22748fd764f52d3a7ca6fa6b64", + "reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64", "shasum": "" }, "require": { @@ -440,20 +598,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-04-03T05:24:00+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959" + "reference": "9f1cea656afc5512c6f5e58d61fcea12acee113e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/67bf5e4f4da85624f30a5e43b7f43225c8b71959", - "reference": "67bf5e4f4da85624f30a5e43b7f43225c8b71959", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9f1cea656afc5512c6f5e58d61fcea12acee113e", + "reference": "9f1cea656afc5512c6f5e58d61fcea12acee113e", "shasum": "" }, "require": { @@ -511,11 +669,11 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-01-04T15:52:56+00:00" + "time": "2018-04-02T09:52:41+00:00" }, { "name": "symfony/expression-language", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", @@ -565,16 +723,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed" + "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/760e47a4ee64b4c48f4b30017011e09d4c0f05ed", - "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", + "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", "shasum": "" }, "require": { @@ -610,20 +768,69 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-02-22T10:50:29+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", + "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-04-04T05:10:37+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -635,7 +842,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -669,20 +876,20 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/yaml", - "version": "v4.0.3", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "b84f646b9490d2101e2c25ddeec77ceefbda2eee" + "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b84f646b9490d2101e2c25ddeec77ceefbda2eee", - "reference": "b84f646b9490d2101e2c25ddeec77ceefbda2eee", + "url": "https://api.github.com/repos/symfony/yaml/zipball/8b34ebb5989df61cbd77eff29a02c4db9ac1069c", + "reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c", "shasum": "" }, "require": { @@ -727,20 +934,73 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" + "time": "2018-04-03T05:24:00+00:00" + }, + { + "name": "zendframework/zend-code", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-code.git", + "reference": "6b1059db5b368db769e4392c6cb6cc139e56640d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-code/zipball/6b1059db5b368db769e4392c6cb6cc139e56640d", + "reference": "6b1059db5b368db769e4392c6cb6cc139e56640d", + "shasum": "" + }, + "require": { + "php": "^7.1", + "zendframework/zend-eventmanager": "^2.6 || ^3.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "zendframework/zend-coding-standard": "^1.0.0", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "zendframework/zend-stdlib": "Zend\\Stdlib component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides facilities to generate arbitrary code using an object oriented interface", + "homepage": "https://github.com/zendframework/zend-code", + "keywords": [ + "code", + "zf2" + ], + "time": "2017-10-20T15:21:32+00:00" }, { "name": "zendframework/zend-db", - "version": "2.9.2", + "version": "2.9.3", "source": { "type": "git", "url": "https://github.com/zendframework/zend-db.git", - "reference": "1651abb1b33fc8fbd2d78ff9e2abb526cc2cf666" + "reference": "5b4f2c42f94c9f7f4b2f456a0ebe459fab12b3d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-db/zipball/1651abb1b33fc8fbd2d78ff9e2abb526cc2cf666", - "reference": "1651abb1b33fc8fbd2d78ff9e2abb526cc2cf666", + "url": "https://api.github.com/repos/zendframework/zend-db/zipball/5b4f2c42f94c9f7f4b2f456a0ebe459fab12b3d9", + "reference": "5b4f2c42f94c9f7f4b2f456a0ebe459fab12b3d9", "shasum": "" }, "require": { @@ -785,20 +1045,74 @@ "db", "zf" ], - "time": "2017-12-11T14:57:52+00:00" + "time": "2018-04-09T13:21:36+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "reference": "9d72db10ceb6e42fb92350c0cb54460da61bd79c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "^6.0.7 || ^5.7.14", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev", + "dev-develop": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ], + "time": "2017-07-11T19:17:22+00:00" }, { "name": "zendframework/zend-stdlib", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "debedcfc373a293f9250cc9aa03cf121428c8e78" + "reference": "10ef03144902d1955f935fff5346ed52f7d99bcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/debedcfc373a293f9250cc9aa03cf121428c8e78", - "reference": "debedcfc373a293f9250cc9aa03cf121428c8e78", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/10ef03144902d1955f935fff5346ed52f7d99bcc", + "reference": "10ef03144902d1955f935fff5346ed52f7d99bcc", "shasum": "" }, "require": { @@ -807,7 +1121,7 @@ "require-dev": { "athletic/athletic": "~0.1", "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "^2.6.2" + "zendframework/zend-coding-standard": "~1.0.0" }, "type": "library", "extra": { @@ -830,7 +1144,7 @@ "stdlib", "zf2" ], - "time": "2016-09-13T14:38:50+00:00" + "time": "2018-04-12T16:05:42+00:00" } ], "packages-dev": [ @@ -933,6 +1247,50 @@ ], "time": "2017-10-19T19:58:43+00:00" }, + { + "name": "neighborhoods/scaffolding", + "version": "dev-master", + "source": { + "type": "git", + "url": "git@github.com:neighborhoods/Scaffolding.git", + "reference": "fda6e2b4b314bc8c41c93f5e2fce63222bf40861" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/neighborhoods/Scaffolding/zipball/fda6e2b4b314bc8c41c93f5e2fce63222bf40861", + "reference": "fda6e2b4b314bc8c41c93f5e2fce63222bf40861", + "shasum": "" + }, + "require": { + "neighborhoods/pylon": "dev-master", + "php": ">=7.1", + "phpunit/dbunit": "^4.0", + "phpunit/phpunit": "^7.0", + "symfony/config": "^4.0", + "symfony/dependency-injection": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/filesystem": "^4.0", + "symfony/finder": "^4.0", + "symfony/yaml": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Neighborhoods\\Scaffolding\\": "src" + } + }, + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "Neighborhoods.com", + "email": "brad.wilson@neighborhoods.com" + } + ], + "description": "Neighborhoods Scaffolding is meant to make the creation of contract testing easy and fast.", + "time": "2018-04-18T19:29:54+00:00" + }, { "name": "phar-io/manifest", "version": "1.0.1", @@ -1091,16 +1449,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.2.0", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { @@ -1138,7 +1496,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-27T17:38:31+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -1189,28 +1547,28 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.3", + "version": "1.7.6", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", - "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { @@ -1248,33 +1606,33 @@ "spy", "stub" ], - "time": "2017-11-24T13:59:53+00:00" + "time": "2018-04-18T13:57:24+00:00" }, { "name": "phpunit/dbunit", - "version": "3.0.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/dbunit.git", - "reference": "0fa4329e490480ab957fe7b1185ea0996ca11f44" + "reference": "e77b469c3962b5a563f09a2a989f1c9bd38b8615" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/0fa4329e490480ab957fe7b1185ea0996ca11f44", - "reference": "0fa4329e490480ab957fe7b1185ea0996ca11f44", + "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/e77b469c3962b5a563f09a2a989f1c9bd38b8615", + "reference": "e77b469c3962b5a563f09a2a989f1c9bd38b8615", "shasum": "" }, "require": { "ext-pdo": "*", "ext-simplexml": "*", - "php": "^7.0", - "phpunit/phpunit": "^6.0", + "php": "^7.1", + "phpunit/phpunit": "^7.0", "symfony/yaml": "^3.0 || ^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1300,44 +1658,44 @@ "testing", "xunit" ], - "time": "2018-01-23T13:32:26+00:00" + "time": "2018-02-07T06:47:59+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.0", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" + "reference": "774a82c0c5da4c1c7701790c262035d235ab7856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", - "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/774a82c0c5da4c1c7701790c262035d235ab7856", + "reference": "774a82c0c5da4c1c7701790c262035d235ab7856", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", + "php": "^7.1", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -1363,7 +1721,7 @@ "testing", "xunit" ], - "time": "2017-12-06T09:29:45+00:00" + "time": "2018-04-06T15:39:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1455,28 +1813,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1491,7 +1849,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1500,33 +1858,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2018-02-01T13:07:23+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1549,20 +1907,20 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2018-02-01T13:16:43+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.5", + "version": "7.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "83d27937a310f2984fd575686138597147bdc7df" + "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", - "reference": "83d27937a310f2984fd575686138597147bdc7df", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6d51299e307dc510149e0b7cd1931dd11770e1cb", + "reference": "6d51299e307dc510149e0b7cd1931dd11770e1cb", "shasum": "" }, "require": { @@ -1574,15 +1932,15 @@ "myclabs/deep-copy": "^1.6.1", "phar-io/manifest": "^1.0.1", "phar-io/version": "^1.0", - "php": "^7.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", + "phpunit/php-code-coverage": "^6.0.1", "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.5", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", + "phpunit/php-timer": "^2.0", + "phpunit/phpunit-mock-objects": "^6.1.1", + "sebastian/comparator": "^2.1 || ^3.0", + "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -1590,16 +1948,12 @@ "sebastian/resource-operations": "^1.0", "sebastian/version": "^2.0.1" }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -1607,7 +1961,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "7.1-dev" } }, "autoload": { @@ -1633,33 +1987,30 @@ "testing", "xunit" ], - "time": "2017-12-17T06:31:19+00:00" + "time": "2018-04-18T13:41:53+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "5.0.6", + "version": "6.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" + "reference": "70c740bde8fd9ea9ea295be1cd875dd7b267e157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", - "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/70c740bde8fd9ea9ea295be1cd875dd7b267e157", + "reference": "70c740bde8fd9ea9ea295be1cd875dd7b267e157", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.5", - "php": "^7.0", + "php": "^7.1", "phpunit/php-text-template": "^1.2.1", "sebastian/exporter": "^3.1" }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, "require-dev": { - "phpunit/phpunit": "^6.5" + "phpunit/phpunit": "^7.0" }, "suggest": { "ext-soap": "*" @@ -1667,7 +2018,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -1692,7 +2043,7 @@ "mock", "xunit" ], - "time": "2018-01-06T05:45:45+00:00" + "time": "2018-04-11T04:50:36+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1741,30 +2092,30 @@ }, { "name": "sebastian/comparator", - "version": "2.1.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087" + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/11c07feade1d65453e06df3b3b90171d6d982087", - "reference": "11c07feade1d65453e06df3b3b90171d6d982087", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ed5fd2281113729f1ebcc64d101ad66028aeb3d5", + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0", + "php": "^7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1801,32 +2152,33 @@ "compare", "equality" ], - "time": "2018-01-12T06:34:42+00:00" + "time": "2018-04-18T13:33:00+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/e09160918c66281713f1c324c1f4c4c3037ba1e8", + "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1851,9 +2203,12 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2018-02-01T13:45:15+00:00" }, { "name": "sebastian/environment", @@ -2253,55 +2608,6 @@ "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, - { - "name": "symfony/finder", - "version": "v4.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8b08180f2b7ccb41062366b9ad91fbc4f1af8601", - "reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-01-03T07:38:00+00:00" - }, { "name": "theseer/tokenizer", "version": "1.1.0", @@ -2344,16 +2650,16 @@ }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -2390,12 +2696,15 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "neighborhoods/pylon": 20, + "neighborhoods/scaffolding": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { diff --git a/docker/build.sh b/docker/build.sh index 70c6717c..b82b6997 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -82,6 +82,6 @@ fi if [ "$INSTALL_XDEBUG" = true ]; then echo "Installing the xdebug extension..." - pecl install xdebug + pecl install xdebug-2.7.0alpha1 docker-php-ext-enable xdebug fi diff --git a/docker/xdebug.ini b/docker/xdebug.ini index ca72d4a4..976bd78b 100644 --- a/docker/xdebug.ini +++ b/docker/xdebug.ini @@ -8,4 +8,4 @@ xdebug.remote_autostart=1 xdebug.remote_connect_back=0 xdebug.remote_mode=req xdebug.remote_port=9000 -xdebug.remote_host=dockerhost +xdebug.remote_host=docker.for.mac.localhost \ No newline at end of file diff --git a/example/Environment/Parameters.yml b/example/Environment/Parameters.yml new file mode 100644 index 00000000..ac91cdb2 --- /dev/null +++ b/example/Environment/Parameters.yml @@ -0,0 +1,8 @@ +parameters: + neighborhoods.kojo.environment.parameters.redis_port: '%env(REDIS_PORT)%' + neighborhoods.kojo.environment.parameters.redis_host: '%env(REDIS_HOST)%' + neighborhoods.kojo.environment.parameters.database_user_name: '%env(DATABASE_USERNAME)%' + neighborhoods.kojo.environment.parameters.database_password: '%env(DATABASE_PASSWORD)%' + neighborhoods.kojo.environment.parameters.database_adapter: '%env(DATABASE_ADAPTER)%' + neighborhoods.kojo.environment.parameters.database_host: '%env(DATABASE_HOST)%' + neighborhoods.kojo.environment.parameters.database_name: '%env(DATABASE_NAME)%' \ No newline at end of file diff --git a/example/Worker.php b/example/Worker.php index 5a480b17..eaa697f3 100644 --- a/example/Worker.php +++ b/example/Worker.php @@ -1,12 +1,25 @@ _getApiV1WorkerService()->getNewJobScheduler(); +// $newJobScheduler->setJobTypeCode('type_code_1') +// ->setWorkAtDateTime(new \DateTime('now')) +// ->save() +// ->getJobId(); + $this->_getApiV1WorkerService()->requestCompleteSuccess()->applyRequest(); + return $this; } } \ No newline at end of file diff --git a/example/Worker/Bootstrap.php b/example/Worker/Bootstrap.php index 4dc1efd5..2ac05af7 100644 --- a/example/Worker/Bootstrap.php +++ b/example/Worker/Bootstrap.php @@ -1,19 +1,18 @@ _getDbConnectionContainer(ContainerInterface::NAME_JOB)->setPdo($pdo); - $this->_getDbConnectionContainer(ContainerInterface::NAME_SCHEMA)->setPdo($pdo); + $pdo = new \PDO('mysql:dbname=kojo;host=mysql', 'root', 'nhdsroot'); + $this->_setJobPdo($pdo); + $this->_setSchemaPdo($pdo); return $this; } diff --git a/example/Worker/Bootstrap.yml b/example/Worker/Bootstrap.yml new file mode 100644 index 00000000..d98f3ccd --- /dev/null +++ b/example/Worker/Bootstrap.yml @@ -0,0 +1,9 @@ +services: + neighborhoods.kojo.example.worker.bootstrap: + class: Neighborhoods\Kojo\Example\Worker\Bootstrap + parent: worker.bootstrap_abstract + public: false + shared: false + worker.bootstrap: + alias: neighborhoods.kojo.example.worker.bootstrap + public: false \ No newline at end of file diff --git a/example/config/root.yml b/example/config/root.yml deleted file mode 100644 index a926dacc..00000000 --- a/example/config/root.yml +++ /dev/null @@ -1,16 +0,0 @@ -services: - nhds.jobs.db.connection.container-schema: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_SCHEMA')"]] - nhds.jobs.db.connection.container-job: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_JOB')"]] - nhds.jobs.example.worker.bootstrap: - class: NHDS\Jobs\Example\Worker\Bootstrap - calls: - - [addDbConnectionContainer, ['@nhds.jobs.db.connection.container-job']] - - [addDbConnectionContainer, ['@nhds.jobs.db.connection.container-schema']] - worker.bootstrap: - alias: nhds.jobs.example.worker.bootstrap \ No newline at end of file diff --git a/nhdstoolkitsrc/ContainerBuilder/AwareTrait.php b/nhdstoolkitsrc/ContainerBuilder/AwareTrait.php deleted file mode 100644 index a6d69d24..00000000 --- a/nhdstoolkitsrc/ContainerBuilder/AwareTrait.php +++ /dev/null @@ -1,57 +0,0 @@ -_servicesYamlFilePaths[$servicesYamlFilePath])) { - $this->_servicesYamlFilePaths[$servicesYamlFilePath] = $servicesYamlFilePath; - }else { - - throw new \LogicException('Services YML file path "' . $servicesYamlFilePath . '" is already set.'); - } - - return $this; - } - - protected function _getServicesYmlFilePaths(): array - { - if (empty($this->_servicesYamlFilePaths)) { - throw new \LogicException('Services YML file paths is empty.'); - } - - return $this->_servicesYamlFilePaths; - } - - public function getContainerBuilder(): ContainerBuilder - { - if ($this->_containerBuilder === null) { - $containerBuilder = new ContainerBuilder(); - $loader = new YamlFileLoader($containerBuilder, new FileLocator(__DIR__)); - foreach ($this->_getServicesYmlFilePaths() as $servicesYmlFilePath) { - $loader->import($servicesYmlFilePath); - } - $passes = [new AnalyzeServiceReferencesPass(), new InlineServiceDefinitionsPass()]; - $repeatedPass = new RepeatedPass($passes); - $repeatedPass->process($containerBuilder); - $containerBuilder->set('container_builder', $containerBuilder); - $containerBuilder->compile(true); - $this->_containerBuilder = $containerBuilder; - } - - return $this->_containerBuilder; - } -} \ No newline at end of file diff --git a/nhdstoolkitsrc/Data/Property/Persistent/AwareTrait.php b/nhdstoolkitsrc/Data/Property/Persistent/AwareTrait.php deleted file mode 100644 index bc67b0ab..00000000 --- a/nhdstoolkitsrc/Data/Property/Persistent/AwareTrait.php +++ /dev/null @@ -1,127 +0,0 @@ -_hasPersistentProperties()) { - $this->_persistentProperties = $persistentProperties; - $this->_changedPersistentProperties = $persistentProperties; - }else { - throw new \LogicException('Persistent properties is already set.'); - } - - return $this; - } - - protected function _emptyPersistentProperties() - { - if ($this->_hasPersistentProperties()) { - $this->_persistentProperties = []; - $this->_changedPersistentProperties = []; - }else { - throw new \LogicException('Persistent properties is not set.'); - } - - return $this; - } - - protected function _hydrate(array $persistentProperties) - { - $this->_persistentProperties = array_replace($this->_persistentProperties, $persistentProperties); - $this->_changedPersistentProperties = []; - - return $this; - } - - protected function _createPersistentProperty(string $persistentPropertyName, $persistentPropertyValue) - { - if ($this->_hasPersistentProperty($persistentPropertyName)) { - throw new \LogicException('Persistent property ' . $persistentPropertyName . ' is already set.'); - }else { - $this->_persistentProperties[$persistentPropertyName] = $persistentPropertyValue; - $this->_changedPersistentProperties[$persistentPropertyName] = $persistentPropertyValue; - } - - return $this; - } - - protected function _readPersistentProperty(string $persistentPropertyName) - { - if (!isset($this->_persistentProperties[$persistentPropertyName])) { - throw new \LogicException('Persistent property ' . $persistentPropertyName . ' is not set'); - } - - return $this->_persistentProperties[$persistentPropertyName]; - } - - protected function _unsetPersistentProperty(string $persistentPropertyName) - { - if ($this->_hasPersistentProperty($persistentPropertyName)) { - unset($this->_persistentProperties[$persistentPropertyName]); - $this->_changedPersistentProperties[$persistentPropertyName] = null; - }else { - throw new \LogicException('Persistent property is not set.'); - } - - return $this; - } - - public function readPersistentProperties(): array - { - if (!$this->_hasPersistentProperties()) { - throw new \LogicException('Persistent properties is not set.'); - } - - return $this->_persistentProperties; - } - - protected function _createOrUpdatePersistentProperty(string $persistentPropertyName, $persistentPropertyValue) - { - $this->_persistentProperties[$persistentPropertyName] = $persistentPropertyValue; - $this->_changedPersistentProperties[$persistentPropertyName] = $persistentPropertyValue; - - return $this; - } - - protected function _hasPersistentProperty(string $persistentPropertyName): bool - { - return isset($this->_persistentProperties[$persistentPropertyName]); - } - - protected function _hasPersistentProperties(): bool - { - return empty($this->_persistentProperties) ? false : true; - } - - public function hasChangedPersistentProperties(): bool - { - return empty($this->_changedPersistentProperties) ? false : true; - } - - protected function _readChangedPersistentProperties(): array - { - if (!$this->hasChangedPersistentProperties()) { - throw new \LogicException('Changed persistent properties is not set.'); - } - - return $this->_changedPersistentProperties; - } - - protected function _emptyChangedPersistentProperties() - { - if ($this->hasChangedPersistentProperties()) { - $this->_changedPersistentProperties = []; - }else { - throw new \LogicException('Changed persistent properties is not set.'); - } - - return $this; - } -} \ No newline at end of file diff --git a/nhdstoolkitsrc/Data/Property/Strict/AwareTrait.php b/nhdstoolkitsrc/Data/Property/Strict/AwareTrait.php deleted file mode 100644 index 4c6b7d7f..00000000 --- a/nhdstoolkitsrc/Data/Property/Strict/AwareTrait.php +++ /dev/null @@ -1,52 +0,0 @@ -_exists($propertyName), new \LogicException($propertyName . ' is already created.')); - $this->_strictProperties[$propertyName] = $propertyValue; - - return $this; - } - - protected function &_read(string $propertyName) - { - assert($this->_exists($propertyName), new \LogicException($propertyName . ' is not created.')); - - return $this->_strictProperties[$propertyName]; - } - - protected function _update(string $propertyName, $propertyValue) - { - assert($this->_exists($propertyName), new \LogicException($propertyName . ' is not created.')); - $this->_strictProperties[$propertyName] = $propertyValue; - - return $this; - } - - protected function _createOrUpdate(string $propertyName, $propertyValue) - { - $this->_strictProperties[$propertyName] = $propertyValue; - - return $this; - } - - protected function _delete(string $propertyName) - { - assert($this->_exists($propertyName), new \LogicException($propertyName . ' is not created.')); - unset($this->_strictProperties[$propertyName]); - - return $this; - } - - protected function _exists(string $propertyName): bool - { - return isset($this->_strictProperties[$propertyName]) ? true : false; - } -} \ No newline at end of file diff --git a/nhdstoolkitsrc/Time.php b/nhdstoolkitsrc/Time.php deleted file mode 100644 index a8ddefba..00000000 --- a/nhdstoolkitsrc/Time.php +++ /dev/null @@ -1,46 +0,0 @@ -setTimezone($this->getDateTimeZone($timezoneCode)); - - return $now; - } - - public function getUnixReferenceTimeNow(): string - { - return sprintf('%.06f', microtime(true)); - } - - public function validateTimestamp(string $timestamp, string $format = TimeInterface::MYSQL_DATE_TIME_FORMAT): bool - { - $dateTime = \DateTime::createFromFormat($format, $timestamp); - - return $dateTime && $dateTime->format($format) == $timestamp; - } - - public function getDateTimeZone(string $timezoneCode = self::DEFAULT_TIMEZONE_CODE): \DateTimeZone - { - if (!isset($this->_dateTimeZones[$timezoneCode])) { - $dateTimeZone = new \DateTimeZone($timezoneCode); - $this->_dateTimeZones[$timezoneCode] = $dateTimeZone; - } - - return clone $this->_dateTimeZones[$timezoneCode]; - } - - public function getNewDateInterval(string $intervalSpec): \DateInterval - { - return new \DateInterval($intervalSpec); - } -} \ No newline at end of file diff --git a/nhdstoolkitsrc/Time/AwareTrait.php b/nhdstoolkitsrc/Time/AwareTrait.php deleted file mode 100644 index 69a9a16f..00000000 --- a/nhdstoolkitsrc/Time/AwareTrait.php +++ /dev/null @@ -1,31 +0,0 @@ -_time === null) { - $this->_time = $time; - }else { - throw new \Exception('Time is already set.'); - } - - return $this; - } - - protected function _getTime(): TimeInterface - { - if ($this->_time === null) { - throw new \LogicException('Time is not set.'); - } - - return $this->_time; - } -} \ No newline at end of file diff --git a/nhdstoolkitsrc/TimeInterface.php b/nhdstoolkitsrc/TimeInterface.php deleted file mode 100644 index 4e499d15..00000000 --- a/nhdstoolkitsrc/TimeInterface.php +++ /dev/null @@ -1,21 +0,0 @@ -addServicesYmlFilePath($ymlServiceFilePath); - $testCaseService = $this->getContainerBuilder()->get('nhds.watch.testcase.service'); - $this->setTestCaseService($testCaseService); - - parent::setUp(); - } -} \ No newline at end of file diff --git a/nhdswatchsrc/Fixture/AbstractTest.php b/nhdswatchsrc/Fixture/AbstractTest.php deleted file mode 100644 index 666990cc..00000000 --- a/nhdswatchsrc/Fixture/AbstractTest.php +++ /dev/null @@ -1,119 +0,0 @@ -addServicesYmlFilePath($ymlServiceFilePath); - $testCaseService = $this->getContainerBuilder()->get('nhds.watch.testcase.service'); - $this->setTestCaseService($testCaseService); - $tearDown = $this->_getTestContainerBuilder()->get('db.tear_down'); - $tearDown->uninstall(); - $setup = $this->_getTestContainerBuilder()->get('db.setup'); - $setup->install(); - $redis = $this->_getTestContainerBuilder()->get('redis'); - $redis->flushAll(); - - parent::setUp(); - } - - protected function getConnection() - { - $pdo = $this->_getTestContainerBuilder()->get('pdo'); - - return $this->createDefaultDBConnection($pdo); - } - - protected function getDataSet() - { - $reflectionClass = new ReflectionClass($this); - $testClassFilePath = $reflectionClass->getFileName(); - $testClassDirectoryPath = dirname($testClassFilePath); - $className = $reflectionClass->getShortName(); - $fixturesDirectoryPath = $testClassDirectoryPath . '/fixtures/' . $className; - $finder = new Finder(); - $finder->files()->in($fixturesDirectoryPath); - $finder->sortByName(); - foreach ($finder as $filePath => $file) { - $this->_addFilePathToYmlDataSet($filePath); - } - - return $this->_getEvaluatedYmlDataSet(); - } - - protected function _addFilePathToYmlDataSet(string $ymlDataSetFilePath): AbstractTest - { - if (!$this->_exists(YamlDataSet::class)) { - $ymlParser = new SymfonyYamlParser(); - $ymlParser->setFlags(Yaml::PARSE_CUSTOM_TAGS); - $this->_create(YamlDataSet::class, new YamlDataSet($ymlDataSetFilePath, $ymlParser)); - }else { - $this->_getYmlDataSet()->addYamlFile($ymlDataSetFilePath); - } - - return $this; - } - - protected function _getEvaluatedYmlDataSet(): YamlDataSet - { - /** @var DefaultTableIterator $tableIterator */ - $tableIterator = $this->_getYmlDataSet()->getIterator(); - $expressionLanguage = new ExpressionLanguage(); - $expressionValues = &$this->_getTestCaseService()->getExpressionValues(); - /** @var DefaultTable $table */ - foreach ($tableIterator as $table) { - $rowCount = $table->getRowCount(); - while (--$rowCount >= 0) { - $row = $table->getRow($rowCount); - foreach ($row as $columnName => $columnValue) { - if ($columnValue instanceof TaggedValue) { - if ($columnValue->getTag() === self::YML_SIGIL_PREFIX_FIXTURE_EXPRESSION) { - $expression = $columnValue->getValue(); - $expressedValue = $expressionLanguage->evaluate($expression, $expressionValues); - $table->setValue($rowCount, $columnName, $expressedValue); - } - } - } - } - } - - return $this->_getYmlDataSet(); - } - - protected function _getYmlDataSet(): YamlDataSet - { - return $this->_read(YamlDataSet::class); - } - - protected function _getTime(): TimeInterface - { - return $this->_getTestContainerBuilder()->get('nhds.toolkit.time'); - } -} \ No newline at end of file diff --git a/nhdswatchsrc/Fixture/Expression/NumberPool.php b/nhdswatchsrc/Fixture/Expression/NumberPool.php deleted file mode 100644 index 62b21f88..00000000 --- a/nhdswatchsrc/Fixture/Expression/NumberPool.php +++ /dev/null @@ -1,54 +0,0 @@ -isPoolInitialized($poolName)) { - $this->_initializePoolName($poolName); - } - - return $this->_nextNumberPool[$poolName]; - } - - public function advance(string $poolName): NumberPool - { - if (!$this->isPoolInitialized($poolName)) { - $this->_initializePoolName($poolName); - } - ++$this->_nextNumberPool[$poolName]; - - return $this; - } - - public function rewind(string $poolName): NumberPool - { - if (!$this->isPoolInitialized($poolName)) { - $this->_initializePoolName($poolName); - } - ++$this->_nextNumberPool[$poolName]; - - return $this; - } - - public function isPoolInitialized(string $poolName): bool - { - return isset($this->_nextNumberPool[$poolName]) ? true : false; - } - - protected function _initializePoolName(string $poolName): NumberPool - { - if (isset($this->_nextNumberPool[$poolName])) { - throw new \LogicException('Pool name is already initialized.'); - } - - $this->_nextNumberPool[$poolName] = 0; - - return $this; - } -} \ No newline at end of file diff --git a/nhdswatchsrc/Fixture/Expression/Value/AwareTrait.php b/nhdswatchsrc/Fixture/Expression/Value/AwareTrait.php deleted file mode 100644 index 068c1a3f..00000000 --- a/nhdswatchsrc/Fixture/Expression/Value/AwareTrait.php +++ /dev/null @@ -1,33 +0,0 @@ -_expressionValues[$valueName])) { - throw new \LogicException('Expression value with value name "' . $valueName . '" is already set."'); - } - $this->_expressionValues[$valueName] = $value; - - return $this; - } - - public function hasExpressionValues(): bool - { - return empty($this->_expressionValues) ? false : true; - } - - public function &getExpressionValues(): array - { - if (empty($this->_expressionValues)) { - throw new \LogicException('Expression values is empty.'); - } - - return $this->_expressionValues; - } -} \ No newline at end of file diff --git a/nhdswatchsrc/PHPUnit/DbUnit/DataSet/SymfonyYamlParser.php b/nhdswatchsrc/PHPUnit/DbUnit/DataSet/SymfonyYamlParser.php deleted file mode 100644 index cda78fef..00000000 --- a/nhdswatchsrc/PHPUnit/DbUnit/DataSet/SymfonyYamlParser.php +++ /dev/null @@ -1,31 +0,0 @@ -_create(self::PROP_FLAGS, $flags); - - return $this; - } - - protected function _getFlags() - { - return $this->_read(self::PROP_FLAGS); - } - - public function parseYaml($yamlFile) - { - return Yaml::parse(\file_get_contents($yamlFile), $this->_getFlags()); - } -} \ No newline at end of file diff --git a/nhdswatchsrc/TestCase/ContainerBuilder/AwareTrait.php b/nhdswatchsrc/TestCase/ContainerBuilder/AwareTrait.php deleted file mode 100644 index b76f6451..00000000 --- a/nhdswatchsrc/TestCase/ContainerBuilder/AwareTrait.php +++ /dev/null @@ -1,40 +0,0 @@ -_exists('test_container_builder')) { - $reflectionClass = new ReflectionClass($this); - $testClassFilePath = $reflectionClass->getFileName(); - $testClassDirectoryPath = dirname($testClassFilePath); - $shortName = $reflectionClass->getShortName(); - $testServicesYamlFilePath = $testClassDirectoryPath . '/config/' . $shortName . '.yml'; - $testContainerBuilder = new ContainerBuilder(); - $loader = new YamlFileLoader($testContainerBuilder, new FileLocator(__DIR__)); - $loader->load($testServicesYamlFilePath); - $passes = [new AnalyzeServiceReferencesPass(), new InlineServiceDefinitionsPass()]; - $repeatedPass = new RepeatedPass($passes); - $repeatedPass->process($testContainerBuilder); - $testContainerBuilder->set('test_container_builder', $testContainerBuilder); - $testContainerBuilder->compile(true); - $this->_create('test_container_builder', $testContainerBuilder); - } - - return $this->_read('test_container_builder'); - } -} \ No newline at end of file diff --git a/nhdswatchsrc/TestCase/Service.php b/nhdswatchsrc/TestCase/Service.php deleted file mode 100644 index f76b036c..00000000 --- a/nhdswatchsrc/TestCase/Service.php +++ /dev/null @@ -1,13 +0,0 @@ -_testCaseService === null) { - $this->_testCaseService = $testCaseService; - }else { - throw new \LogicException('Test case service is already set.'); - } - - return $this; - } - - protected function _getTestCaseService(): TestCase\Service - { - if ($this->_testCaseService === null) { - throw new \LogicException('Test case service is not set.'); - } - - return $this->_testCaseService; - } -} \ No newline at end of file diff --git a/nhdswatchsrc/TestCase/ServiceInterface.php b/nhdswatchsrc/TestCase/ServiceInterface.php deleted file mode 100644 index e04c17b4..00000000 --- a/nhdswatchsrc/TestCase/ServiceInterface.php +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - - - - - - + + + @@ -28,7 +19,7 @@ - + ./tests/* diff --git a/src/Api/V1/Job/Scheduler.php b/src/Api/V1/Job/Scheduler.php new file mode 100644 index 00000000..e8238195 --- /dev/null +++ b/src/Api/V1/Job/Scheduler.php @@ -0,0 +1,46 @@ +_getServiceCreate()->setJobTypeCode($jobTypeCode); + + return $this; + } + + public function setImportance(int $importance): SchedulerInterface + { + $this->_getServiceCreate()->setImportance($importance); + + return $this; + } + + public function setWorkAtDateTime(\DateTime $workAtDateTime): SchedulerInterface + { + $this->_getServiceCreate()->setWorkAtDateTime($workAtDateTime); + + return $this; + } + + public function getJobId(): int + { + return $this->_getServiceCreate()->getJobId(); + } + + public function save(): SchedulerInterface + { + $this->_getServiceCreate()->save(); + + return $this; + } +} diff --git a/src/Api/V1/Job/Scheduler.yml b/src/Api/V1/Job/Scheduler.yml new file mode 100644 index 00000000..fac67cf7 --- /dev/null +++ b/src/Api/V1/Job/Scheduler.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.api.v1.job.scheduler: + class: Neighborhoods\Kojo\Api\V1\Job\Scheduler + public: false + shared: false + api.v1.job.scheduler: + alias: neighborhoods.kojo.api.v1.job.scheduler + public: false \ No newline at end of file diff --git a/src/Api/V1/Job/Scheduler/AwareTrait.php b/src/Api/V1/Job/Scheduler/AwareTrait.php new file mode 100644 index 00000000..109e8a7a --- /dev/null +++ b/src/Api/V1/Job/Scheduler/AwareTrait.php @@ -0,0 +1,38 @@ +_create(SchedulerInterface::class, $apiV1JobScheduler); + + return $this; + } + + protected function _getApiV1JobScheduler(): SchedulerInterface + { + return $this->_read(SchedulerInterface::class); + } + + protected function _getApiV1JobSchedulerClone(): SchedulerInterface + { + return clone $this->_getApiV1JobScheduler(); + } + + protected function _hasApiV1JobScheduler(): bool + { + return $this->_exists(SchedulerInterface::class); + } + + protected function _unsetApiV1JobScheduler(): self + { + $this->_delete(SchedulerInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Scheduler/Factory.php b/src/Api/V1/Job/Scheduler/Factory.php new file mode 100644 index 00000000..acbd2528 --- /dev/null +++ b/src/Api/V1/Job/Scheduler/Factory.php @@ -0,0 +1,23 @@ +_getApiV1JobSchedulerClone(); + $apiV1JobScheduler->setServiceCreate($this->_getServiceCreateFactory()->create()); + + return $apiV1JobScheduler; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Scheduler/Factory.yml b/src/Api/V1/Job/Scheduler/Factory.yml new file mode 100644 index 00000000..7f0bed69 --- /dev/null +++ b/src/Api/V1/Job/Scheduler/Factory.yml @@ -0,0 +1,11 @@ +services: + neighborhoods.kojo.api.v1.job.scheduler.factory: + class: Neighborhoods\Kojo\Api\V1\Job\Scheduler\Factory + public: false + shared: true + calls: + - [setServiceCreateFactory, ['@service.create.factory']] + - [setApiV1JobScheduler, ['@api.v1.job.scheduler']] + api.v1.job.scheduler.factory: + alias: neighborhoods.kojo.api.v1.job.scheduler.factory + public: false \ No newline at end of file diff --git a/src/Api/V1/Job/Scheduler/Factory/AwareTrait.php b/src/Api/V1/Job/Scheduler/Factory/AwareTrait.php new file mode 100644 index 00000000..b74c6095 --- /dev/null +++ b/src/Api/V1/Job/Scheduler/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $apiV1JobSchedulerFactory); + + return $this; + } + + protected function _getApiV1JobSchedulerFactoryClone(): FactoryInterface + { + return clone $this->_getApiV1JobSchedulerFactory(); + } + + protected function _getApiV1JobSchedulerFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _hasApiV1JobSchedulerFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetApiV1JobSchedulerFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Scheduler/FactoryInterface.php b/src/Api/V1/Job/Scheduler/FactoryInterface.php new file mode 100644 index 00000000..8cf25ffb --- /dev/null +++ b/src/Api/V1/Job/Scheduler/FactoryInterface.php @@ -0,0 +1,18 @@ +_getTypeServiceCreate()->save(); + + return $this; + } + + public function setCode(string $code): RegistrarInterface + { + $this->_getTypeServiceCreate()->setCode($code); + + return $this; + } + + public function setWorkerClassUri(string $workerModelUri): RegistrarInterface + { + $this->_getTypeServiceCreate()->setWorkerClassUri($workerModelUri); + + return $this; + } + + public function setWorkerMethod(string $workerMethod): RegistrarInterface + { + $this->_getTypeServiceCreate()->setWorkerMethod($workerMethod); + + return $this; + } + + public function setName(string $name): RegistrarInterface + { + $this->_getTypeServiceCreate()->setName($name); + + return $this; + } + + public function setCronExpression(string $cronExpression): RegistrarInterface + { + $this->_getTypeServiceCreate()->setCronExpression($cronExpression); + + return $this; + } + + public function setCanWorkInParallel(bool $canWorkInParallel): RegistrarInterface + { + $this->_getTypeServiceCreate()->setCanWorkInParallel($canWorkInParallel); + + return $this; + } + + public function setDefaultImportance(int $defaultImportance): RegistrarInterface + { + $this->_getTypeServiceCreate()->setDefaultImportance($defaultImportance); + + return $this; + } + + public function setScheduleLimit(int $scheduleLimit): RegistrarInterface + { + $this->_getTypeServiceCreate()->setScheduleLimit($scheduleLimit); + + return $this; + } + + public function setScheduleLimitAllowance(int $scheduleLimitAllowance): RegistrarInterface + { + $this->_getTypeServiceCreate()->setScheduleLimitAllowance($scheduleLimitAllowance); + + return $this; + } + + public function setIsEnabled(bool $isEnabled): RegistrarInterface + { + $this->_getTypeServiceCreate()->setIsEnabled($isEnabled); + + return $this; + } + + public function setAutoCompleteSuccess(bool $autoCompleteSuccess): RegistrarInterface + { + $this->_getTypeServiceCreate()->setAutoCompleteSuccess($autoCompleteSuccess); + + return $this; + } + + public function setAutoDeleteIntervalDuration(string $autoDeleteIntervalDuration): RegistrarInterface + { + $this->_getTypeServiceCreate()->setAutoDeleteIntervalDuration($autoDeleteIntervalDuration); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar.yml b/src/Api/V1/Job/Type/Registrar.yml new file mode 100644 index 00000000..e72e0dc5 --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.api.v1.job.type.registrar: + class: Neighborhoods\Kojo\Api\V1\Job\Type\Registrar + public: false + shared: false + calls: + - [setTypeServiceCreate, ['@type.service.create']] + api.v1.job.type.registrar: + alias: neighborhoods.kojo.api.v1.job.type.registrar + public: true \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar/AwareTrait.php b/src/Api/V1/Job/Type/Registrar/AwareTrait.php new file mode 100644 index 00000000..62074c44 --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar/AwareTrait.php @@ -0,0 +1,38 @@ +_create(RegistrarInterface::class, $ApiV1JobTypeRegistrar); + + return $this; + } + + protected function _getApiV1JobTypeRegistrar(): RegistrarInterface + { + return $this->_read(RegistrarInterface::class); + } + + protected function _getApiV1JobTypeRegistrarClone(): RegistrarInterface + { + return clone $this->_getApiV1JobTypeRegistrar(); + } + + protected function _hasApiV1JobTypeRegistrar(): bool + { + return $this->_exists(RegistrarInterface::class); + } + + protected function _unsetApiV1JobTypeRegistrar(): self + { + $this->_delete(RegistrarInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar/Factory.php b/src/Api/V1/Job/Type/Registrar/Factory.php new file mode 100644 index 00000000..280d9ba8 --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar/Factory.php @@ -0,0 +1,19 @@ +_getApiV1JobTypeRegistrarClone(); + + return $apiV1JobTypeRegistrar; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar/Factory.yml b/src/Api/V1/Job/Type/Registrar/Factory.yml new file mode 100644 index 00000000..9c8241a6 --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar/Factory.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.api.v1.job.type.registrar.factory: + class: Neighborhoods\Kojo\Api\V1\Job\Type\Registrar\Factory + public: false + shared: true + calls: + - [setApiV1JobTypeRegistrar, ['@api.v1.job.type.registrar']] + api.v1.job.type.registrar.factory: + alias: neighborhoods.kojo.api.v1.job.type.registrar.factory + public: true \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar/Factory/AwareTrait.php b/src/Api/V1/Job/Type/Registrar/Factory/AwareTrait.php new file mode 100644 index 00000000..c476dd8d --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $apiV1JobTypeRegistrarFactory); + + return $this; + } + + protected function _getApiV1JobTypeRegistrarFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _getApiV1JobTypeRegistrarFactoryClone(): FactoryInterface + { + return clone $this->_getApiV1JobTypeRegistrarFactory(); + } + + protected function _hasApiV1JobTypeRegistrarFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetApiV1JobTypeRegistrarFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Type/Registrar/FactoryInterface.php b/src/Api/V1/Job/Type/Registrar/FactoryInterface.php new file mode 100644 index 00000000..25c42c9e --- /dev/null +++ b/src/Api/V1/Job/Type/Registrar/FactoryInterface.php @@ -0,0 +1,11 @@ +_getContainerBuilderFacade()->addFinder($ymlServiceFinder); + + return $this; + } + + public function getNewJobTypeRegistrar(): RegistrarInterface + { + return $this->_getContainerBuilder()->get(self::REGISTRAR_FACTORY_SERVICE_ID)->create(); + } + + protected function _getContainerBuilder(): ContainerBuilder + { + return $this->_getContainerBuilderFacade()->getContainerBuilder(); + } + + protected function _getContainerBuilderFacade(): FacadeInterface + { + if ($this->_containerBuilderFacade === null) { + $containerBuilderFacade = new Facade(); + $containerBuilderFacade->addFinder($this->_getKojoDiFinder()); + $this->_containerBuilderFacade = $containerBuilderFacade; + } + + return $this->_containerBuilderFacade; + } + + protected function _getKojoDiFinder() + { + if ($this->_kojoDiFinder === null) { + $kojoDiFinder = new Finder(); + $kojoDiFinder->name('*.yml'); + $kojoDiFinder->files()->in($this->_getKojoApplicationDirectoryPath()); + + $this->_kojoDiFinder = $kojoDiFinder; + } + + return $this->_kojoDiFinder; + } + + protected function _getKojoApplicationDirectoryPath(): string + { + if ($this->_kojoApplicationDirectoryPath === null) { + $this->_kojoApplicationDirectoryPath = dirname(__FILE__) . '/../../../../../src'; + } + + return $this->_kojoApplicationDirectoryPath; + } +} \ No newline at end of file diff --git a/src/Api/V1/Job/Type/ServiceInterface.php b/src/Api/V1/Job/Type/ServiceInterface.php new file mode 100644 index 00000000..3d87df59 --- /dev/null +++ b/src/Api/V1/Job/Type/ServiceInterface.php @@ -0,0 +1,9 @@ +_getLogger()->emergency($message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + */ + public function alert($message, array $context = array()) + { + $this->_getLogger()->alert($message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + */ + public function critical($message, array $context = array()) + { + $this->_getLogger()->critical($message, $context); + } + + /** Runtime errors that do not require immediate action but should typically be logged and monitored. */ + public function error($message, array $context = array()) + { + $this->_getLogger()->error($message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + */ + public function warning($message, array $context = array()) + { + $this->_getLogger()->warning($message, $context); + } + + /** Normal but significant events. */ + public function notice($message, array $context = array()) + { + $this->_getLogger()->notice($message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + */ + public function info($message, array $context = array()) + { + $this->_getLogger()->info($message, $context); + } + + /** Detailed debug information. */ + public function debug($message, array $context = array()) + { + $this->_getLogger()->debug($message, $context); + } + + /** Logs with an arbitrary level. */ + public function log($level, $message, array $context = array()) + { + $this->_getLogger()->log($level, $message, $context); + } +} \ No newline at end of file diff --git a/src/Api/V1/Logger/AwareTrait.php b/src/Api/V1/Logger/AwareTrait.php new file mode 100644 index 00000000..9714ed44 --- /dev/null +++ b/src/Api/V1/Logger/AwareTrait.php @@ -0,0 +1,38 @@ +_create(LoggerInterface::class, $apiV1Logger); + + return $this; + } + + protected function _getApiV1Logger(): LoggerInterface + { + return $this->_read(LoggerInterface::class); + } + + protected function _getApiV1LoggerClone(): LoggerInterface + { + return clone $this->_getApiV1Logger(); + } + + protected function _hasApiV1Logger(): bool + { + return $this->_exists(LoggerInterface::class); + } + + protected function _unsetApiV1Logger(): self + { + $this->_delete(LoggerInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Api/V1/LoggerInterface.php b/src/Api/V1/LoggerInterface.php new file mode 100644 index 00000000..3ea60221 --- /dev/null +++ b/src/Api/V1/LoggerInterface.php @@ -0,0 +1,8 @@ +_createOrUpdate(self::PROP_RETRY_DATE_TIME, $dateTime); + + return $this; } protected function _getDateTime(): \DateTime @@ -66,7 +72,7 @@ public function requestCompleteFailed(): ServiceInterface public function applyRequest(): ServiceInterface { - if (!$this->_exists(self::PROP_REQUEST_APPPLIED)) { + if (!$this->_exists(self::PROP_REQUEST_APPLIED)) { switch ($this->_read(self::PROP_REQUEST)) { case self::REQUEST_RETRY: $updateRetry = $this->_getServiceUpdateRetryFactory()->create(); @@ -90,9 +96,9 @@ public function applyRequest(): ServiceInterface $updateCompleteFailed->save(); break; default: - throw new \UnexpectedValueException('Unexpected value "' . $this->_read(self::PROP_REQUEST) . '"'); + throw new \UnexpectedValueException('Unexpected value[' . $this->_read(self::PROP_REQUEST) . '].'); } - $this->_create(self::PROP_REQUEST_APPPLIED, true); + $this->_create(self::PROP_REQUEST_APPLIED, true); } return $this; @@ -100,11 +106,21 @@ public function applyRequest(): ServiceInterface public function isRequestApplied(): bool { - return $this->_exists(self::PROP_REQUEST_APPPLIED); + return $this->_exists(self::PROP_REQUEST_APPLIED); + } + + public function getLogger(): LoggerInterface + { + return $this->_getApiV1Logger(); + } + + public function reload(): ServiceInterface + { + return $this; } - public function getNewJobServiceCreate(): CreateInterface + public function getNewJobScheduler(): SchedulerInterface { - return $this->_getServiceCreateFactory()->create(); + return $this->_getApiV1JobSchedulerFactory()->create(); } } \ No newline at end of file diff --git a/src/config/Worker/Job/Service.yml b/src/Api/V1/Worker/Service.yml similarity index 60% rename from src/config/Worker/Job/Service.yml rename to src/Api/V1/Worker/Service.yml index a6d6dd1d..c4fe6e75 100644 --- a/src/config/Worker/Job/Service.yml +++ b/src/Api/V1/Worker/Service.yml @@ -1,12 +1,12 @@ services: - nhds.jobs.worker.job.service: - class: NHDS\Jobs\Worker\Job\Service + neighborhoods.kojo.api.v1.worker.service: + class: Neighborhoods\Kojo\Api\V1\Worker\Service shared: false calls: - - [setServiceCreateFactory, ['@service.create.factory']] - [setServiceUpdateCompleteFailedFactory, ['@service.update.complete.failed.factory']] - [setServiceUpdateCompleteSuccessFactory, ['@service.update.complete.success.factory']] - [setServiceUpdateHoldFactory, ['@service.update.hold.factory']] - [setServiceUpdateRetryFactory, ['@service.update.retry.factory']] - worker.job.service: - alias: nhds.jobs.worker.job.service \ No newline at end of file + - [setApiV1JobSchedulerFactory, ['@api.v1.job.scheduler.factory']] + api.v1.worker.service: + alias: neighborhoods.kojo.api.v1.worker.service \ No newline at end of file diff --git a/src/Api/V1/Worker/Service/AwareTrait.php b/src/Api/V1/Worker/Service/AwareTrait.php new file mode 100644 index 00000000..d20bdd8a --- /dev/null +++ b/src/Api/V1/Worker/Service/AwareTrait.php @@ -0,0 +1,33 @@ +_create(ServiceInterface::class, $workerService); + + return $this; + } + + protected function _getApiV1WorkerService(): ServiceInterface + { + return $this->_read(ServiceInterface::class); + } + + protected function _hasApiV1WorkerService(): bool + { + return $this->_exists(ServiceInterface::class); + } + + protected function _unsetApiV1WorkerService(): self + { + $this->_delete(ServiceInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Worker/Job/ServiceInterface.php b/src/Api/V1/Worker/ServiceInterface.php similarity index 52% rename from src/Worker/Job/ServiceInterface.php rename to src/Api/V1/Worker/ServiceInterface.php index 39903e72..2b16760b 100644 --- a/src/Worker/Job/ServiceInterface.php +++ b/src/Api/V1/Worker/ServiceInterface.php @@ -1,14 +1,15 @@ _create(self::PROP_APPLICATION_NAME, $applicationName); + + return $this; + } + + protected function _getApplicationName(): string + { + if (!$this->_exists(self::PROP_APPLICATION_NAME)) { + $this->_create(self::PROP_APPLICATION_NAME, ini_get("newrelic.appname")); + } + + return $this->_read(self::PROP_APPLICATION_NAME); + } + + public function startTransaction(): NewRelicInterface + { + if (extension_loaded(self::NEW_RELIC_EXTENSION_NAME)) { + newrelic_start_transaction($this->_getApplicationName()); + } + + return $this; + } + + public function endTransaction(): NewRelicInterface + { + if (extension_loaded(self::NEW_RELIC_EXTENSION_NAME)) { + newrelic_end_transaction(); + } + + return $this; + } + + public function ignoreTransaction(): NewRelicInterface + { + if (extension_loaded(self::NEW_RELIC_EXTENSION_NAME)) { + newrelic_ignore_transaction(); + } + + return $this; + } + + public function nameTransaction(string $name): NewRelicInterface + { + if (extension_loaded(self::NEW_RELIC_EXTENSION_NAME)) { + newrelic_name_transaction($name); + } + + return $this; + } + + public function addCustomParameter(string $key, $value): NewRelicInterface + { + if (!is_scalar($value)) { + throw new \InvalidArgumentException("Value is not a scalar."); + } + if (extension_loaded(self::NEW_RELIC_EXTENSION_NAME)) { + newrelic_add_custom_parameter($key, $value); + } + + return $this; + } +} \ No newline at end of file diff --git a/src/Apm/NewRelic.yml b/src/Apm/NewRelic.yml new file mode 100644 index 00000000..bd076463 --- /dev/null +++ b/src/Apm/NewRelic.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.apm.new_relic: + class: Neighborhoods\Kojo\Apm\NewRelic + public: false + shared: true + apm.new_relic: + alias: neighborhoods.kojo.apm.new_relic + public: false \ No newline at end of file diff --git a/src/Apm/NewRelic/AwareTrait.php b/src/Apm/NewRelic/AwareTrait.php new file mode 100644 index 00000000..d09f8957 --- /dev/null +++ b/src/Apm/NewRelic/AwareTrait.php @@ -0,0 +1,38 @@ +_create(NewRelicInterface::class, $apmNewRelic); + + return $this; + } + + protected function _getApmNewRelic(): NewRelicInterface + { + return $this->_read(NewRelicInterface::class); + } + + protected function _getApmNewRelicClone(): NewRelicInterface + { + return clone $this->_getApmNewRelic(); + } + + protected function _hasApmNewRelic(): bool + { + return $this->_exists(NewRelicInterface::class); + } + + protected function _unsetApmNewRelic(): self + { + $this->_delete(NewRelicInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Apm/NewRelicInterface.php b/src/Apm/NewRelicInterface.php new file mode 100644 index 00000000..671752bf --- /dev/null +++ b/src/Apm/NewRelicInterface.php @@ -0,0 +1,21 @@ +_create(CacheItemPoolInterface::class, $cacheItemPool); - - return $this; - } - - protected function _getCacheItemPool(): CacheItemPoolInterface - { - return $this->_read(CacheItemPoolInterface::class); - } - - protected function _getCacheItemPoolClone(): CacheItemPoolInterface - { - return clone $this->_getCacheItemPool(); - } -} \ No newline at end of file diff --git a/src/CacheItemPool/Factory.php b/src/CacheItemPool/Factory.php new file mode 100644 index 00000000..a2e62970 --- /dev/null +++ b/src/CacheItemPool/Factory.php @@ -0,0 +1,21 @@ +_getRedisRepository()->getById(CacheItemPoolInterface::class); + + return new RedisAdapter($redis); + } +} \ No newline at end of file diff --git a/src/CacheItemPool/Factory.yml b/src/CacheItemPool/Factory.yml new file mode 100644 index 00000000..f90ac039 --- /dev/null +++ b/src/CacheItemPool/Factory.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.cache_item_pool.factory: + class: Neighborhoods\Kojo\CacheItemPool\Factory + public: false + shared: true + calls: + - [setRedisRepository, ['@redis.repository']] + cache_item_pool.factory: + alias: neighborhoods.kojo.cache_item_pool.factory + public: false \ No newline at end of file diff --git a/src/CacheItemPool/Factory/AwareTrait.php b/src/CacheItemPool/Factory/AwareTrait.php new file mode 100644 index 00000000..27d74d6c --- /dev/null +++ b/src/CacheItemPool/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $cacheItemPoolFactory); + + return $this; + } + + protected function _getCacheItemPoolFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _getCacheItemPoolFactoryClone(): FactoryInterface + { + return clone $this->_getCacheItemPoolFactory(); + } + + protected function _hasCacheItemPoolFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetCacheItemPoolFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/CacheItemPool/FactoryInterface.php b/src/CacheItemPool/FactoryInterface.php new file mode 100644 index 00000000..23e7867c --- /dev/null +++ b/src/CacheItemPool/FactoryInterface.php @@ -0,0 +1,15 @@ +_getProcessRegistry()->getLastRegisteredProcess()->getUuid(); + if (!isset($this->_cacheItemPoolCollection[$id])) { + $this->_cacheItemPoolCollection[$id] = $this->_getCacheItemPoolFactory()->create(); + } + + return $this->_cacheItemPoolCollection[$id]; + } +} \ No newline at end of file diff --git a/src/CacheItemPool/Repository.yml b/src/CacheItemPool/Repository.yml new file mode 100644 index 00000000..b8e0a3c0 --- /dev/null +++ b/src/CacheItemPool/Repository.yml @@ -0,0 +1,11 @@ +services: + neighborhoods.kojo.cache_item_pool.repository: + class: Neighborhoods\Kojo\CacheItemPool\Repository + shared: true + public: false + calls: + - [setCacheItemPoolFactory, ['@cache_item_pool.factory']] + - [setProcessRegistry, ['@process.registry']] + cache_item_pool.repository: + alias: neighborhoods.kojo.cache_item_pool.repository + public: false \ No newline at end of file diff --git a/src/CacheItemPool/Repository/AwareTrait.php b/src/CacheItemPool/Repository/AwareTrait.php new file mode 100644 index 00000000..9f68b8a8 --- /dev/null +++ b/src/CacheItemPool/Repository/AwareTrait.php @@ -0,0 +1,38 @@ +_create(RepositoryInterface::class, $cacheItemPoolRepository); + + return $this; + } + + protected function _getCacheItemPoolRepository(): RepositoryInterface + { + return $this->_read(RepositoryInterface::class); + } + + protected function _getCacheItemPoolRepositoryClone(): RepositoryInterface + { + return clone $this->_getCacheItemPoolRepository(); + } + + protected function _hasCacheItemPoolRepository(): bool + { + return $this->_exists(RepositoryInterface::class); + } + + protected function _unsetCacheItemPoolRepository(): self + { + $this->_delete(RepositoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/CacheItemPool/RepositoryInterface.php b/src/CacheItemPool/RepositoryInterface.php new file mode 100644 index 00000000..48453182 --- /dev/null +++ b/src/CacheItemPool/RepositoryInterface.php @@ -0,0 +1,13 @@ +setName('db:setup:install'); - $this->setDescription('Installs Jobs to a persistent storage engine.'); + $this->setName(self::COMMAND_NAME); + $this->setDescription('Installs Kōjō to a persistent storage engine.'); $this->setHelp($this->_getHelp()); return $this; @@ -25,6 +26,7 @@ public function _execute(): CommandAbstract { $this->_getBootstrap()->instantiate(); $this->_getDbSetup()->install(); + $this->_getOutput()->writeln('Kōjō has been successfully installed!'); return $this; } @@ -32,8 +34,8 @@ public function _execute(): CommandAbstract protected function _getHelp(): string { return <<<'EOD' -This command installs a Jobs cluster on a persistent storage engine. -Currently only \PDO compatible storage engines are supported. +This command installs a Kōjō cluster on a persistent storage engine. +Currently, only \PDO compatible storage engines are supported. The client's Bootstrap class will be called prior to setup, and that \PDO class will be used for setup. EOD; } diff --git a/src/Console/Command/Db/Setup/Install.yml b/src/Console/Command/Db/Setup/Install.yml new file mode 100644 index 00000000..545d3993 --- /dev/null +++ b/src/Console/Command/Db/Setup/Install.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.console.command.db.setup.install: + class: Neighborhoods\Kojo\Console\Command\Db\Setup\Install + calls: + - [setBootstrap, ['@worker.bootstrap']] + - [setDbSetup, ['@db.setup']] + console.command.db.setup.install: + alias: neighborhoods.kojo.console.command.db.setup.install \ No newline at end of file diff --git a/src/Console/Command/Db/TearDown/Uninstall.php b/src/Console/Command/Db/TearDown/Uninstall.php index 6ece5d66..3d347cee 100644 --- a/src/Console/Command/Db/TearDown/Uninstall.php +++ b/src/Console/Command/Db/TearDown/Uninstall.php @@ -1,21 +1,27 @@ setName('db:teardown:uninstall'); - $this->setDescription('Uninstalls Jobs from the persistent storage engine.'); + $this->setName(self::COMMAND_NAME); + $this->setDescription('Uninstalls Kōjō and ALL DATA from the persistent storage engine.'); $this->setHelp($this->_getHelp()); return $this; @@ -23,18 +29,72 @@ protected function _configure(): CommandAbstract public function _execute(): CommandAbstract { - $this->_getBootstrap()->instantiate(); - $this->_getDbTearDown()->uninstall(); + if ($this->_isUninstallConfirmedByUser()) { + $this->_getBootstrap()->instantiate(); + $this->_getDbTearDown()->uninstall(); + $this->_getOutput()->writeln('Kōjō has been successfully uninstalled.'); + }else { + $this->_getOutput()->writeln('Kōjō was not uninstalled.'); + } return $this; } + protected function _isUninstallConfirmedByUser(): bool + { + return $this->_getQuestionHelper()->ask($this->_getInput(), $this->_getOutput(), $this->_getQuestion()); + } + + protected function _getQuestionHelper(): QuestionHelper + { + return $this->getHelper('question'); + } + + protected function _getQuestion(): Question + { + if ($this->_question === null) { + $question = new Question($this->_getQuestionMessage(), false); + $question->setValidator($this->_getValidator()); + $this->_question = $question; + } + + return $this->_question; + } + + protected function _getValidator(): callable + { + $validator = function (string $answer): bool{ + $confirmedByUser = Uninstall::ANSWER_DELETE_CONFIRMED_BY_USER; + if (!($confirmedByUser === $answer || Uninstall::ANSWER_DELETE_DECLINED_BY_USER === $answer)) { + throw new \RuntimeException('Please type either "delete" or "no" to proceed.'); + } + + return ($answer === $confirmedByUser); + }; + + return $validator; + } + + protected function _getQuestionMessage(): string + { + return <<<'EOD' + + !!! WARNING !!! + + THIS ACTION WILL PERMANENTLY DELETE ALL OF YOUR KŌJŌ DATA!!! + + THIS ACTION CANNOT BE UNDONE! + +Do you want to permanently delete ALL of your Kōjō data?(delete | no) +EOD; + } + protected function _getHelp(): string { return <<<'EOD' -WARNING: THIS WILL DELETE ALL JOB DATA IN PERSISTENT STORAGE. +WARNING!!! THIS WILL DELETE ALL KŌJŌ DATA IN PERSISTENT STORAGE! -This command UNINSTALLS a Jobs cluster from a persistent storage engine. +This command UNINSTALLS a Kōjō cluster from a persistent storage engine. Currently only \PDO compatible storage engines are supported. The client's Bootstrap class will be called prior to setup, and that \PDO class will be used for setup. EOD; diff --git a/src/Console/Command/Db/TearDown/Uninstall.yml b/src/Console/Command/Db/TearDown/Uninstall.yml new file mode 100644 index 00000000..1a061330 --- /dev/null +++ b/src/Console/Command/Db/TearDown/Uninstall.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.console.command.db.tear_down.uninstall: + class: Neighborhoods\Kojo\Console\Command\Db\TearDown\Uninstall + calls: + - [setBootstrap, ['@worker.bootstrap']] + - [setDbTearDown, ['@db.tear_down']] + console.command.db.tear_down.uninstall: + alias: neighborhoods.kojo.console.command.db.tear_down.uninstall \ No newline at end of file diff --git a/src/Console/Command/Process/Pool/Server/Start.php b/src/Console/Command/Process/Pool/Server/Start.php index 2368a6b5..fed141c3 100644 --- a/src/Console/Command/Process/Pool/Server/Start.php +++ b/src/Console/Command/Process/Pool/Server/Start.php @@ -1,25 +1,30 @@ setName('process:pool:server:start'); + $this->setName(self::COMMAND_NAME); + $this->setAliases(self::COMMAND_NAME_ALIASES); $this->setDescription('Starts a new process pool server.'); $this->setHelp($this->_getHelp()); $this->addOption( - self::OPT_SERVICES_YML_FILE_PATH, - 'syfp', + self::OPT_SERVICES_YML_DIRECTORY_PATH, + self::OPT_YSDP, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Additional YML services file paths to load. These are loaded in the order provided.' + 'Additional YML services directory paths to load. These are loaded in the order provided.' ); return $this; @@ -27,11 +32,12 @@ protected function _configure(): CommandAbstract public function _execute(): CommandAbstract { - $arguments = ['ysfp:' . $this->_getInput()->getArgument(self::ARG_SERVICES_YML_FILE_PATH)]; - foreach ($this->_getInput()->getOption(self::OPT_SERVICES_YML_FILE_PATH) as $servicesYmlFilePath) { - $arguments[] = 'ysfp:' . $servicesYmlFilePath; + $arguments = [self::OPT_RUN_SERVER]; + $arguments[] = self::OPT_YSDP . $this->_getInput()->getArgument(self::ARG_SERVICES_YML_FILE_PATH); + foreach ($this->_getInput()->getOption(self::OPT_SERVICES_YML_DIRECTORY_PATH) as $servicesYmlFilePath) { + $arguments[] = self::OPT_YSDP . $servicesYmlFilePath; } - pcntl_exec(__DIR__ . '/../../../../../bin/server', $arguments); + pcntl_exec(__DIR__ . '/../../../../../../bin/kojo', $arguments); $this->_getOutput()->writeln('An error occurred trying to start the process pool server.'); return $this; @@ -40,10 +46,9 @@ public function _execute(): CommandAbstract protected function _getHelp() { return <<<'EOD' -This command starts a new process pool server. -Currently only one server can be run at a time for a given machine. -If a server is already running this command will return immediately. -More than one server and named servers will be available in future releases. +This command starts a new collection of process pool servers. +The number of process pool servers that are started is defined in the dependency injection YML files. +The default number of servers started is one. EOD; } } \ No newline at end of file diff --git a/src/Console/Command/Process/Pool/Server/Start.yml b/src/Console/Command/Process/Pool/Server/Start.yml new file mode 100644 index 00000000..98fb0007 --- /dev/null +++ b/src/Console/Command/Process/Pool/Server/Start.yml @@ -0,0 +1,5 @@ +services: + neighborhoods.kojo.console.command.process.pool.server.start: + class: Neighborhoods\Kojo\Console\Command\Process\Pool\Server\Start + console.command.process.pool.server.start: + alias: neighborhoods.kojo.console.command.process.pool.server.start \ No newline at end of file diff --git a/src/Console/CommandAbstract.php b/src/Console/CommandAbstract.php index 5632e9b6..707161e2 100644 --- a/src/Console/CommandAbstract.php +++ b/src/Console/CommandAbstract.php @@ -1,18 +1,27 @@ _setInput($input); $this->_setOutput($output); - $this->_writeSplash(); + $this->_writeSplashArt(); $this->_execute(); return $this; @@ -65,15 +74,9 @@ protected function _getInput(): InputInterface abstract function _execute(): CommandAbstract; - protected function _writeSplash(): CommandAbstract + protected function _writeSplashArt(): CommandAbstract { - $this->_getOutput()->writeln( - [ - 'NHDS Jobs - A distributed task manager.', - '=======================================', - '', - ] - ); + $this->_getOutput()->writeln(self::SPLASH_ART); return $this; } diff --git a/src/Data/AutoSchedule/Sqs.php b/src/Data/AutoSchedule/Sqs.php deleted file mode 100644 index ae8f0fcc..00000000 --- a/src/Data/AutoSchedule/Sqs.php +++ /dev/null @@ -1,44 +0,0 @@ -setTableName(SqsInterface::TABLE_NAME); - $this->setIdPropertyName(SqsInterface::FIELD_NAME_ID); - - return $this; - } - - public function setSqsQueueName(string $sqsQueueName): SqsInterface - { - $this->_create(self::FIELD_NAME_SQS_QUEUE_NAME, $sqsQueueName); - - return $this; - } - - public function getSqsQueueName(): string - { - return $this->_read(self::FIELD_NAME_SQS_QUEUE_NAME); - } - - public function setJobTypeCode(string $jobTypeCode): SqsInterface - { - $this->_create(self::FIELD_NAME_JOB_TYPE_CODE, $jobTypeCode); - - return $this; - } - - public function getJobTypeCode(): string - { - return $this->_read(self::FIELD_NAME_JOB_TYPE_CODE); - } -} \ No newline at end of file diff --git a/src/Data/AutoSchedule/Sqs/AwareTrait.php b/src/Data/AutoSchedule/Sqs/AwareTrait.php deleted file mode 100644 index 6f68adc2..00000000 --- a/src/Data/AutoSchedule/Sqs/AwareTrait.php +++ /dev/null @@ -1,38 +0,0 @@ -_create(SqsInterface::class, $autoScheduleSqs); - - return $this; - } - - protected function _getAutoScheduleSqs(): SqsInterface - { - return $this->_read(SqsInterface::class); - } - - protected function _getAutoScheduleSqsClone(): SqsInterface - { - return clone $this->_getAutoScheduleSqs(); - } - - protected function _hasAutoScheduleSqsClone(): bool - { - return $this->_exists(SqsInterface::class); - } - - protected function _unsetAutoScheduleSqs() - { - $this->_delete(SqsInterface::class); - - return $this; - } -} \ No newline at end of file diff --git a/src/Data/AutoSchedule/SqsInterface.php b/src/Data/AutoSchedule/SqsInterface.php deleted file mode 100644 index 80cccf48..00000000 --- a/src/Data/AutoSchedule/SqsInterface.php +++ /dev/null @@ -1,24 +0,0 @@ -setTableName(JobInterface::TABLE_NAME); @@ -340,15 +337,27 @@ public function getDeleteAfterDateTime(): \DateTime return new \DateTime($deleteAfterDateTimeString); } - public function setProcessTypeCode(string $processTypeCode): JobInterface + public function setMostRecentHostName(string $mostRecentHostName): JobInterface + { + $this->_createOrUpdatePersistentProperty(JobInterface::FIELD_NAME_MOST_RECENT_HOST_NAME, $mostRecentHostName); + + return $this; + } + + public function getMostRecentHostName(): string + { + return $this->_readPersistentProperty(JobInterface::FIELD_NAME_MOST_RECENT_HOST_NAME); + } + + public function setMostRecentProcessId(int $mostRecentProcessId): JobInterface { - $this->_createPersistentProperty(self::FIELD_NAME_PROCESS_TYPE_CODE, $processTypeCode); + $this->_createOrUpdatePersistentProperty(JobInterface::FIELD_NAME_MOST_RECENT_PROCESS_ID, $mostRecentProcessId); return $this; } - public function getProcessTypeCode(): string + public function getMostRecentProcessId(): int { - return $this->_readPersistentProperty(self::FIELD_NAME_PROCESS_TYPE_CODE); + return (int)$this->_readPersistentProperty(JobInterface::FIELD_NAME_MOST_RECENT_PROCESS_ID); } } \ No newline at end of file diff --git a/src/Data/Job.yml b/src/Data/Job.yml new file mode 100644 index 00000000..d8e85221 --- /dev/null +++ b/src/Data/Job.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.data.job: + class: Neighborhoods\Kojo\Data\Job + shared: false + parent: db.model + data.job: + alias: neighborhoods.kojo.data.job + public: false \ No newline at end of file diff --git a/src/Data/Job/AwareTrait.php b/src/Data/Job/AwareTrait.php index 7f95170d..b61bfa95 100644 --- a/src/Data/Job/AwareTrait.php +++ b/src/Data/Job/AwareTrait.php @@ -1,9 +1,9 @@ _getJob(); } + protected function _hasJob(): bool + { + return $this->_exists(JobInterface::class); + } + protected function _unsetJob() { $this->_delete(JobInterface::class); diff --git a/src/Data/Job/Collection/CrashDetection.php b/src/Data/Job/Collection/CrashDetection.php index ece1aa73..4617e902 100644 --- a/src/Data/Job/Collection/CrashDetection.php +++ b/src/Data/Job/Collection/CrashDetection.php @@ -1,12 +1,12 @@ _create(self::PROP_RECORDS, []); } $select = $this->getSelect(); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $statement = $this->_getDbConnectionContainerRepository() + ->get(ContainerInterface::ID_JOB) + ->getStatement($select); /** @var \PDOStatement $pdoStatement */ $pdoStatement = $statement->execute()->getResource(); $pdoStatement->setFetchMode($this->_getFetchMode()); diff --git a/src/Data/Job/Collection/Delete.yml b/src/Data/Job/Collection/Delete.yml new file mode 100644 index 00000000..944f77ae --- /dev/null +++ b/src/Data/Job/Collection/Delete.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.data.job.collection.delete: + class: Neighborhoods\Kojo\Data\Job\Collection\Delete + public: false + shared: false + parent: data.job.collection_abstract + calls: + - [setModel, ['@data.job']] + - [setIterator, ['@data.job.collection.iterator']] + data.job.collection.delete: + alias: neighborhoods.kojo.data.job.collection.delete + public: false \ No newline at end of file diff --git a/src/Data/Job/Collection/Delete/AwareTrait.php b/src/Data/Job/Collection/Delete/AwareTrait.php index 63ddd47a..a4060426 100644 --- a/src/Data/Job/Collection/Delete/AwareTrait.php +++ b/src/Data/Job/Collection/Delete/AwareTrait.php @@ -1,9 +1,9 @@ _getRecords()[self::ALIAS_NUMBER_OF_SCHEDULED_JOBS]; + return $this->_getRecords()[self::ALIAS_NUMBER_OF_SCHEDULED_JOBS]; + } + + public function decrementNumberOfCurrentlyScheduledJobs(): ScheduleLimitInterface + { + --$this->_getRecords()[self::ALIAS_NUMBER_OF_SCHEDULED_JOBS]; + + return $this; } protected function &_getRecords(): array @@ -26,7 +33,8 @@ protected function &_getRecords(): array if (!$this->_exists(self::PROP_RECORDS)) { $this->_prepareCollection(); $select = $this->getSelect(); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $statement = $dbConnectionContainer->getStatement($select); /** @var \PDOStatement $pdoStatement */ $pdoStatement = $statement->execute()->getResource(); $pdoStatement->setFetchMode($this->_getFetchMode()); @@ -37,6 +45,8 @@ protected function &_getRecords(): array }else { $this->_create(self::PROP_RECORDS, $records); } + $numberOfScheduledJobs = (int)$this->_read(self::PROP_RECORDS)[self::ALIAS_NUMBER_OF_SCHEDULED_JOBS]; + $this->_read(self::PROP_RECORDS)[self::ALIAS_NUMBER_OF_SCHEDULED_JOBS] = $numberOfScheduledJobs; } return $this->_read(self::PROP_RECORDS); @@ -50,7 +60,8 @@ protected function _prepareCollection(): Db\Model\CollectionAbstract ] ); $this->getSelect()->where->equalTo(JobInterface::FIELD_NAME_TYPE_CODE, $this->_getJobType()->getCode()); - $this->getSelect()->where + $this->getSelect() + ->where ->nest() ->equalTo(JobInterface::FIELD_NAME_ASSIGNED_STATE, State\Service::STATE_WORKING) ->or diff --git a/src/Data/Job/Collection/ScheduleLimit.yml b/src/Data/Job/Collection/ScheduleLimit.yml new file mode 100644 index 00000000..65938011 --- /dev/null +++ b/src/Data/Job/Collection/ScheduleLimit.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.data.job.collection.schedulelimit: + class: Neighborhoods\Kojo\Data\Job\Collection\ScheduleLimit + public: false + shared: false + parent: data.job.collection_abstract + calls: + - [setModel, ['@data.job']] + - [setIterator, ['@data.job.collection.iterator']] + data.job.collection.schedulelimit: + alias: neighborhoods.kojo.data.job.collection.schedulelimit + public: false \ No newline at end of file diff --git a/src/Data/Job/Collection/ScheduleLimit/AwareTrait.php b/src/Data/Job/Collection/ScheduleLimit/AwareTrait.php index 9b266a20..0433c61e 100644 --- a/src/Data/Job/Collection/ScheduleLimit/AwareTrait.php +++ b/src/Data/Job/Collection/ScheduleLimit/AwareTrait.php @@ -1,10 +1,10 @@ _exists(self::PROP_RECORDS)) { $this->_prepareCollection(); $select = $this->getSelect(); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $statement = $dbConnectionContainer->getStatement($select); /** @var \PDOStatement $pdoStatement */ $pdoStatement = $statement->execute()->getResource(); $pdoStatement->setFetchMode(\PDO::FETCH_NUM); diff --git a/src/Data/Job/Collection/Scheduler.yml b/src/Data/Job/Collection/Scheduler.yml new file mode 100644 index 00000000..8707a535 --- /dev/null +++ b/src/Data/Job/Collection/Scheduler.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.data.job.collection.scheduler: + class: Neighborhoods\Kojo\Data\Job\Collection\Scheduler + public: false + shared: false + parent: data.job.collection_abstract + calls: + - [setModel, ['@data.job']] + - [setIterator, ['@data.job.collection.iterator']] + data.job.collection.scheduler: + alias: neighborhoods.kojo.data.job.collection.scheduler + public: false \ No newline at end of file diff --git a/src/Data/Job/Collection/Scheduler/AwareTrait.php b/src/Data/Job/Collection/Scheduler/AwareTrait.php index 0c5b255e..7e21dd6e 100644 --- a/src/Data/Job/Collection/Scheduler/AwareTrait.php +++ b/src/Data/Job/Collection/Scheduler/AwareTrait.php @@ -1,9 +1,9 @@ _create(self::PROP_RECORDS, []); } $select = $this->getSelect(); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $statement = $this->_getDbConnectionContainerRepository() + ->get(ContainerInterface::ID_JOB) + ->getStatement($select); /** @var \PDOStatement $pdoStatement */ $pdoStatement = $statement->execute()->getResource(); $pdoStatement->setFetchMode($this->_getFetchMode()); @@ -64,12 +66,10 @@ protected function _prepareCollection(): Db\Model\CollectionAbstract JobInterface::FIELD_NAME_ID, JobInterface::FIELD_NAME_TYPE_CODE, JobInterface::FIELD_NAME_CAN_WORK_IN_PARALLEL, - JobInterface::FIELD_NAME_PROCESS_TYPE_CODE, ] ); $select->order( [ - JobInterface::FIELD_NAME_PROCESS_TYPE_CODE . ' DESC', JobInterface::FIELD_NAME_PRIORITY . ' DESC', ] ); diff --git a/src/Data/Job/Collection/Selector.yml b/src/Data/Job/Collection/Selector.yml new file mode 100644 index 00000000..c308af70 --- /dev/null +++ b/src/Data/Job/Collection/Selector.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.data.job.collection.selector: + class: Neighborhoods\Kojo\Data\Job\Collection\Selector + public: false + shared: false + parent: data.job.collection_abstract + calls: + - [setModel, ['@data.job']] + - [setIterator, ['@data.job.collection.iterator']] + data.job.collection.selector: + alias: neighborhoods.kojo.data.job.collection.selector + public: false \ No newline at end of file diff --git a/src/Data/Job/Collection/Selector/AwareTrait.php b/src/Data/Job/Collection/Selector/AwareTrait.php index 96cac57c..f39c6896 100644 --- a/src/Data/Job/Collection/Selector/AwareTrait.php +++ b/src/Data/Job/Collection/Selector/AwareTrait.php @@ -1,9 +1,9 @@ setCollection($this); @@ -28,14 +25,4 @@ protected function _getIterator(): IteratorInterface { return $this->_read(IteratorInterface::class); } - - protected function _logSelect(): CollectionAbstract - { - if ($this->_hasLogger()) { - $sql = $this->_getDbConnectionContainer(Db\Connection\ContainerInterface::NAME_JOB)->getSql(); - $this->_getLogger()->debug(get_called_class() . ': ' . $sql->buildSqlString($this->getSelect())); - } - - return $this; - } } \ No newline at end of file diff --git a/src/Data/Job/CollectionAbstract.yml b/src/Data/Job/CollectionAbstract.yml new file mode 100644 index 00000000..3b365823 --- /dev/null +++ b/src/Data/Job/CollectionAbstract.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.data.job.collection_abstract: + class: Neighborhoods\Kojo\Data\Job\CollectionAbstract + abstract: true + public: false + shared: false + calls: + - [setLogger, ['@process.pool.logger']] + - [setDbConnectionContainerRepository, ['@db.connection.container.repository']] + data.job.collection_abstract: + alias: neighborhoods.kojo.data.job.collection_abstract + public: false \ No newline at end of file diff --git a/src/Data/Job/CollectionInterface.php b/src/Data/Job/CollectionInterface.php index 76a01747..3363d64a 100644 --- a/src/Data/Job/CollectionInterface.php +++ b/src/Data/Job/CollectionInterface.php @@ -1,10 +1,10 @@ _readPersistentProperty(TypeInterface::FIELD_NAME_SCHEDULE_LIMIT); } + public function setScheduleLimitAllowance(int $scheduleLimitAllowance): TypeInterface + { + if ($scheduleLimitAllowance < 0) { + throw new \InvalidArgumentException('Schedule limit allowance is less than zero.'); + }; + $this->_createPersistentProperty(TypeInterface::FIELD_NAME_SCHEDULE_LIMIT_ALLOWANCE, $scheduleLimitAllowance); + + return $this; + } + + public function getScheduleLimitAllowance(): int + { + return (int)$this->_readPersistentProperty(TypeInterface::FIELD_NAME_SCHEDULE_LIMIT_ALLOWANCE); + } + public function setIsEnabled(bool $isEnabled): TypeInterface { $this->_createPersistentProperty(TypeInterface::FIELD_NAME_IS_ENABLED, $isEnabled); @@ -155,16 +170,4 @@ public function getAutoDeleteIntervalDuration(): string { return $this->_readPersistentProperty(TypeInterface::FIELD_NAME_AUTO_DELETE_INTERVAL_DURATION); } - - public function setProcessTypeCode(string $processTypeCode): TypeInterface - { - $this->_createPersistentProperty(self::FIELD_NAME_PROCESS_TYPE_CODE, $processTypeCode); - - return $this; - } - - public function getProcessTypeCode(): string - { - return $this->_readPersistentProperty(self::FIELD_NAME_PROCESS_TYPE_CODE); - } } \ No newline at end of file diff --git a/src/Data/Job/Type.yml b/src/Data/Job/Type.yml new file mode 100644 index 00000000..e87d4b26 --- /dev/null +++ b/src/Data/Job/Type.yml @@ -0,0 +1,9 @@ +services: + neighborhoods.kojo.data.job.type: + class: Neighborhoods\Kojo\Data\Job\Type + public: false + shared: false + parent: db.model + data.job.type: + alias: neighborhoods.kojo.data.job.type + public: false \ No newline at end of file diff --git a/src/Data/Job/Type/AwareTrait.php b/src/Data/Job/Type/AwareTrait.php index 02cbb853..e86c482e 100644 --- a/src/Data/Job/Type/AwareTrait.php +++ b/src/Data/Job/Type/AwareTrait.php @@ -1,15 +1,15 @@ _create(TypeInterface::class, $job); + $this->_create(TypeInterface::class, $jobType); return $this; } @@ -29,7 +29,7 @@ public function hasJobType(): bool return $this->_exists(TypeInterface::class); } - protected function _unsetJobType() + protected function _unsetJobType(): self { $this->_delete(TypeInterface::class); diff --git a/src/Data/Job/Type/Collection/Iterator.php b/src/Data/Job/Type/Collection/Iterator.php index 42adcd20..5e36e31a 100644 --- a/src/Data/Job/Type/Collection/Iterator.php +++ b/src/Data/Job/Type/Collection/Iterator.php @@ -1,15 +1,15 @@ _pdo === null) { - throw new \LogicException('PDO is not set.'); + $this->_pdo = $this->_getDbPDOBuilder()->getPdo(); } return $this->_pdo; @@ -53,24 +58,24 @@ public function getConnection(): Connection return $this->_connection; } - public function setName(string $name): ContainerInterface + public function setId(string $id): ContainerInterface { - if ($this->_name === null) { - $this->_name = $name; + if ($this->_id === null) { + $this->_id = $id; }else { - throw new \LogicException('Name is already set.'); + throw new \LogicException('ID is already set.'); } return $this; } - public function getName(): string + public function getId(): string { - if ($this->_name === null) { - throw new \LogicException('Name is not set.'); + if ($this->_id === null) { + throw new \LogicException('ID is not set.'); } - return $this->_name; + return $this->_id; } public function getSql(): Sql diff --git a/src/Db/Connection/Container.yml b/src/Db/Connection/Container.yml new file mode 100644 index 00000000..d5b9048f --- /dev/null +++ b/src/Db/Connection/Container.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.db.connection.container: + class: Neighborhoods\Kojo\Db\Connection\Container + public: true + shared: false + calls: + - [setDbPDOBuilder, ['@db.pdo.builder']] + db.connection.container: + alias: neighborhoods.kojo.db.connection.container + public: true \ No newline at end of file diff --git a/src/Db/Connection/Container/AwareTrait.php b/src/Db/Connection/Container/AwareTrait.php index 981b2e8c..95ba67b2 100644 --- a/src/Db/Connection/Container/AwareTrait.php +++ b/src/Db/Connection/Container/AwareTrait.php @@ -1,32 +1,38 @@ _create(ContainerInterface::class, $dbConnectionContainer); - public function addDbConnectionContainer(ContainerInterface $container) + return $this; + } + + protected function _getDbConnectionContainer(): ContainerInterface { - $containerName = $container->getName(); - if (isset($this->_dbConnectionContainers[$containerName])) { - throw new \LogicException('The container [' . $containerName . '] is already set.'); - } + return $this->_read(ContainerInterface::class); + } - $this->_dbConnectionContainers[$container->getName()] = $container; + protected function _getDbConnectionContainerClone(): ContainerInterface + { + return clone $this->_getDbConnectionContainer(); + } - return $this; + protected function _hasDbConnectionContainer(): bool + { + return $this->_exists(ContainerInterface::class); } - protected function _getDbConnectionContainer(string $containerName): ContainerInterface + protected function _unsetDbConnectionContainer(): self { - if (!isset($this->_dbConnectionContainers[$containerName])) { - throw new \LogicException('The container [' . $containerName . '] is not set.'); - } + $this->_delete(ContainerInterface::class); - return $this->_dbConnectionContainers[$containerName]; + return $this; } } \ No newline at end of file diff --git a/src/Db/Connection/Container/Factory.php b/src/Db/Connection/Container/Factory.php new file mode 100644 index 00000000..17fbcd7b --- /dev/null +++ b/src/Db/Connection/Container/Factory.php @@ -0,0 +1,20 @@ +_getDbConnectionContainerClone(); + + return $dbConnectionContainer; + } +} \ No newline at end of file diff --git a/src/Db/Connection/Container/Factory.yml b/src/Db/Connection/Container/Factory.yml new file mode 100644 index 00000000..56bb4b20 --- /dev/null +++ b/src/Db/Connection/Container/Factory.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.db.connection.container.factory: + class: Neighborhoods\Kojo\Db\Connection\Container\Factory + public: true + shared: true + calls: + - [setDbConnectionContainer, ['@db.connection.container']] + db.connection.container.factory: + alias: neighborhoods.kojo.db.connection.container.factory + public: true \ No newline at end of file diff --git a/src/Db/Connection/Container/Factory/AwareTrait.php b/src/Db/Connection/Container/Factory/AwareTrait.php new file mode 100644 index 00000000..d6e62837 --- /dev/null +++ b/src/Db/Connection/Container/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $dbConnectionContainerFactory); + + return $this; + } + + protected function _getDbConnectionContainerFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _getDbConnectionContainerFactoryClone(): FactoryInterface + { + return clone $this->_getDbConnectionContainerFactory(); + } + + protected function _hasDbConnectionContainerFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetDbConnectionContainerFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Db/Connection/Container/FactoryInterface.php b/src/Db/Connection/Container/FactoryInterface.php new file mode 100644 index 00000000..ef167709 --- /dev/null +++ b/src/Db/Connection/Container/FactoryInterface.php @@ -0,0 +1,13 @@ +_containerCollection[$id])) { + throw new \LogicException("Container with ID[$id] is not set."); + } + + return $this->_containerCollection[$id]; + } + + public function add(ContainerInterface $container): RepositoryInterface + { + $id = $container->getId(); + if (isset($this->_containerCollection[$id])) { + throw new \LogicException("Container with ID[$id] is already set."); + } + $this->_containerCollection[$id] = $container; + + return $this; + } + + public function create(string $id): ContainerInterface + { + if (isset($this->_containerCollection[$id])) { + throw new \LogicException("Container with ID[$id] is already set."); + } + + return $this->_containerCollection[$id] = $this->_getDbConnectionContainerFactory()->create()->setId($id); + } +} \ No newline at end of file diff --git a/src/Db/Connection/Container/Repository.yml b/src/Db/Connection/Container/Repository.yml new file mode 100644 index 00000000..3821bce3 --- /dev/null +++ b/src/Db/Connection/Container/Repository.yml @@ -0,0 +1,13 @@ +services: + neighborhoods.kojo.db.connection.container.repository: + class: Neighborhoods\Kojo\Db\Connection\Container\Repository + public: false + shared: true + calls: + - [setDbConnectionContainerFactory, ['@db.connection.container.factory']] + - [create, ["@=constant(\"\\\\Neighborhoods\\\\Kojo\\\\Db\\\\Connection\\\\ContainerInterface::ID_JOB\")"]] + - [create, ["@=constant(\"\\\\Neighborhoods\\\\Kojo\\\\Db\\\\Connection\\\\ContainerInterface::ID_SCHEMA\")"]] + - [create, ["@=constant(\"\\\\Neighborhoods\\\\Kojo\\\\Db\\\\Connection\\\\ContainerInterface::ID_STATUS\")"]] + db.connection.container.repository: + alias: neighborhoods.kojo.db.connection.container.repository + public: false \ No newline at end of file diff --git a/src/Db/Connection/Container/Repository/AwareTrait.php b/src/Db/Connection/Container/Repository/AwareTrait.php new file mode 100644 index 00000000..4672a4f0 --- /dev/null +++ b/src/Db/Connection/Container/Repository/AwareTrait.php @@ -0,0 +1,38 @@ +_create(RepositoryInterface::class, $dbConnectionContainerRepository); + + return $this; + } + + protected function _getDbConnectionContainerRepository(): RepositoryInterface + { + return $this->_read(RepositoryInterface::class); + } + + protected function _getDbConnectionContainerRepositoryClone(): RepositoryInterface + { + return clone $this->_getDbConnectionContainerRepository(); + } + + protected function _hasDbConnectionContainerRepository(): bool + { + return $this->_exists(RepositoryInterface::class); + } + + protected function _unsetDbConnectionContainerRepository(): self + { + $this->_delete(RepositoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Db/Connection/Container/RepositoryInterface.php b/src/Db/Connection/Container/RepositoryInterface.php new file mode 100644 index 00000000..229148f2 --- /dev/null +++ b/src/Db/Connection/Container/RepositoryInterface.php @@ -0,0 +1,15 @@ +_getLoadSelect($propertyName, $propertyValue); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $statement = $dbConnectionContainer->getStatement($select); $data = $statement->execute()->current(); if ($data) { @@ -97,7 +100,8 @@ public function hasId(): bool protected function _getLoadSelect($field, $value): Select { - $select = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->select($this->getTableName()); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $select = $dbConnectionContainer->select($this->getTableName()); $select->where([$field => $value]); return $select; @@ -116,9 +120,10 @@ public function save(): ModelInterface public function delete(): ModelInterface { - $delete = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->delete($this->getTableName()); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $delete = $dbConnectionContainer->delete($this->getTableName()); $delete->where([$this->getIdPropertyName() => $this->getId()]); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($delete); + $statement = $dbConnectionContainer->getStatement($delete); $statement->execute(); $this->_emptyPersistentProperties(); @@ -127,11 +132,12 @@ public function delete(): ModelInterface protected function insert(): ModelInterface { - $insert = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->insert($this->getTableName()); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $insert = $dbConnectionContainer->insert($this->getTableName()); $insert->values($this->_readChangedPersistentProperties()); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($insert); + $statement = $dbConnectionContainer->getStatement($insert); $statement->execute(); - $id = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getDriver()->getLastGeneratedValue(); + $id = $dbConnectionContainer->getDriver()->getLastGeneratedValue(); $this->setId((int)$id); $this->_emptyChangedPersistentProperties(); @@ -140,11 +146,12 @@ protected function insert(): ModelInterface protected function update(): ModelInterface { + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); $changedPersistentProperties = $this->_readChangedPersistentProperties(); - $update = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->update($this->getTableName()); + $update = $dbConnectionContainer->update($this->getTableName()); $update->where([$this->getIdPropertyName() => $this->getId()]); $update->set($changedPersistentProperties); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($update); + $statement = $dbConnectionContainer->getStatement($update); $statement->execute(); $this->_emptyChangedPersistentProperties(); diff --git a/src/Db/Model.yml b/src/Db/Model.yml new file mode 100644 index 00000000..b8bc3d71 --- /dev/null +++ b/src/Db/Model.yml @@ -0,0 +1,11 @@ +services: + neighborhoods.kojo.db.model: + class: Neighborhoods\Kojo\Db\Model + public: false + shared: false + abstract: true + calls: + - [setDbConnectionContainerRepository, ['@db.connection.container.repository']] + db.model: + alias: neighborhoods.kojo.db.model + public: false \ No newline at end of file diff --git a/src/Db/Model/AwareTrait.php b/src/Db/Model/AwareTrait.php index 8c471f3e..419afe41 100644 --- a/src/Db/Model/AwareTrait.php +++ b/src/Db/Model/AwareTrait.php @@ -1,9 +1,9 @@ _exists(self::PROP_SELECT)) { - $dbConnectionContainer = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); $select = $dbConnectionContainer->select($this->_getModel()->getTableName()); $this->_create(self::PROP_SELECT, $select); } @@ -77,7 +79,8 @@ protected function &_getRecords(): array if (!$this->_exists(self::PROP_RECORDS)) { $this->_prepareCollection(); $select = $this->getSelect(); - $statement = $this->_getDbConnectionContainer(ContainerInterface::NAME_JOB)->getStatement($select); + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB); + $statement = $dbConnectionContainer->getStatement($select); /** @var \PDOStatement $pdoStatement */ $pdoStatement = $statement->execute()->getResource(); $pdoStatement->setFetchMode($this->_getFetchMode()); @@ -93,4 +96,14 @@ protected function &_getRecords(): array } abstract protected function _prepareCollection(): CollectionAbstract; + + protected function _logSelect(): CollectionInterface + { + if ($this->_hasLogger()) { + $sql = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB)->getSql(); + $this->_getLogger()->debug(get_called_class() . ': ' . $sql->buildSqlString($this->getSelect())); + } + + return $this; + } } \ No newline at end of file diff --git a/src/Db/Model/CollectionInterface.php b/src/Db/Model/CollectionInterface.php index 1d129be0..f8834362 100644 --- a/src/Db/Model/CollectionInterface.php +++ b/src/Db/Model/CollectionInterface.php @@ -1,14 +1,14 @@ _pdo === null) { + $dsn = $this->_getDataSourceName(); + $userName = $this->_getUserName(); + $password = $this->_getPassword(); + if ($this->_hasOptions()) { + $options = $this->_getOptions(); + }else { + $options = []; + } + $this->_pdo = new \PDO($dsn, $userName, $password, $options); + } + + return $this->_pdo; + } + + public function setDataSourceName(string $dataSourceName): BuilderInterface + { + $normalizedDataSourceName = preg_replace_callback(self::REGEX_DSN_URI, function ($matches){ + return strtolower($matches[0]); + }, $dataSourceName, 1); + $this->_create(self::PROP_DATA_SOURCE_NAME, $normalizedDataSourceName); + + return $this; + } + + protected function _getDataSourceName(): string + { + return $this->_read(self::PROP_DATA_SOURCE_NAME); + } + + public function setUserName(string $userName): BuilderInterface + { + $this->_create(self::PROP_USER_NAME, $userName); + + return $this; + } + + protected function _getUserName(): string + { + return $this->_read(self::PROP_USER_NAME); + } + + public function setPassword(string $password): BuilderInterface + { + $this->_create(self::PROP_PASSWORD, $password); + + return $this; + } + + protected function _getPassword(): string + { + return $this->_read(self::PROP_PASSWORD); + } + + public function setOptions(array $options): BuilderInterface + { + $this->_create(self::PROP_OPTIONS, $options); + + return $this; + } + + protected function _getOptions(): array + { + return $this->_read(self::PROP_OPTIONS); + } + + protected function _hasOptions(): bool + { + return $this->_exists(self::PROP_OPTIONS); + } +} \ No newline at end of file diff --git a/src/Db/PDO/Builder.yml b/src/Db/PDO/Builder.yml new file mode 100644 index 00000000..1b201947 --- /dev/null +++ b/src/Db/PDO/Builder.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.db.pdo.builder: + class: Neighborhoods\Kojo\Db\PDO\Builder + public: false + shared: false + calls: + - [setPassword, ['%neighborhoods.kojo.environment.parameters.database_password%']] + - [setUserName, ['%neighborhoods.kojo.environment.parameters.database_user_name%']] + - [setDataSourceName, ['%neighborhoods.kojo.environment.parameters.database_adapter%:dbname=%neighborhoods.kojo.environment.parameters.database_name%;host=%neighborhoods.kojo.environment.parameters.database_host%']] + db.pdo.builder: + alias: neighborhoods.kojo.db.pdo.builder + public: false \ No newline at end of file diff --git a/src/Db/PDO/Builder/AwareTrait.php b/src/Db/PDO/Builder/AwareTrait.php new file mode 100644 index 00000000..5ba81fba --- /dev/null +++ b/src/Db/PDO/Builder/AwareTrait.php @@ -0,0 +1,38 @@ +_create(BuilderInterface::class, $dbPDOBuilder); + + return $this; + } + + protected function _getDbPDOBuilder(): BuilderInterface + { + return $this->_read(BuilderInterface::class); + } + + protected function _getDbPDOBuilderClone(): BuilderInterface + { + return clone $this->_getDbPDOBuilder(); + } + + protected function _hasDbPDOBuilder(): bool + { + return $this->_exists(BuilderInterface::class); + } + + protected function _unsetDbPDOBuilder(): self + { + $this->_delete(BuilderInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Db/PDO/BuilderInterface.php b/src/Db/PDO/BuilderInterface.php new file mode 100644 index 00000000..3fb1a611 --- /dev/null +++ b/src/Db/PDO/BuilderInterface.php @@ -0,0 +1,17 @@ +_getDbConnectionContainer(ContainerInterface::NAME_SCHEMA)->getAdapter()->query( - $this->_getDbConnectionContainer(ContainerInterface::NAME_SCHEMA)->getSql()->buildSqlString( - $this->_getSchemaChanges() - ), + $dbConnectionContainer = $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_SCHEMA); + $dbConnectionContainer->getAdapter()->query( + $dbConnectionContainer->getSql()->buildSqlString($this->_getSchemaChanges()), Adapter::QUERY_MODE_EXECUTE ); diff --git a/src/Db/Schema/VersionInterface.php b/src/Db/Schema/VersionInterface.php index 8a53392f..f12c26b1 100644 --- a/src/Db/Schema/VersionInterface.php +++ b/src/Db/Schema/VersionInterface.php @@ -1,7 +1,7 @@ addColumn( new Varchar( 'version', 255, true, null, [ - 'comment' => 'The schema version for jobs.', + 'comment' => 'The schema version for Kojo.', ])); $this->_setSchemaChanges($createTable); diff --git a/src/Db/Setup/Schema/Version_0_0_0.yml b/src/Db/Setup/Schema/Version_0_0_0.yml new file mode 100644 index 00000000..e24e654f --- /dev/null +++ b/src/Db/Setup/Schema/Version_0_0_0.yml @@ -0,0 +1,7 @@ +services: + neighborhoods.kojo.db.setup.schema.version.0_0_0: + class: Neighborhoods\Kojo\Db\Setup\Schema\Version_0_0_0 + calls: + - [setDbConnectionContainerRepository, ["@db.connection.container.repository"]] + db.setup.schema.version.0_0_0: + alias: neighborhoods.kojo.db.setup.schema.version.0_0_0 \ No newline at end of file diff --git a/src/Db/Setup/Schema/Version_1_0_0.php b/src/Db/Setup/Schema/Version_1_0_0.php index a7a9da8c..9b640f58 100644 --- a/src/Db/Setup/Schema/Version_1_0_0.php +++ b/src/Db/Setup/Schema/Version_1_0_0.php @@ -1,11 +1,11 @@ 'COMMENT', 'unsigned' => true, ])); + $createTable->addColumn( + new Integer( + Type::FIELD_NAME_SCHEDULE_LIMIT_ALLOWANCE, true, null, + [ + 'comment' => 'COMMENT', + 'unsigned' => true, + ])); $createTable->addColumn( new Boolean( Type::FIELD_NAME_IS_ENABLED, false, null, @@ -97,12 +104,6 @@ public function assembleSchemaChanges(): VersionInterface 'comment' => 'A ISO 8601 interval duration that describes duration of time past a Job\'s' . ' completed_at_date_time that a Job record of this Job Type should be deleted from storage.', ])); - $createTable->addColumn( - new Varchar( - Type::FIELD_NAME_PROCESS_TYPE_CODE, 255, false, null, - [ - 'comment' => 'The process type code used to run this job type.', - ])); $createTable->addConstraint(new PrimaryKey(Type::FIELD_NAME_ID, Type::FIELD_NAME_ID)); $createTable->addConstraint(new UniqueKey(Type::FIELD_NAME_TYPE_CODE, Type::FIELD_NAME_TYPE_CODE)); $createTable->addConstraint( @@ -113,6 +114,7 @@ public function assembleSchemaChanges(): VersionInterface Type::FIELD_NAME_TYPE_CODE, Type::FIELD_NAME_DEFAULT_IMPORTANCE, Type::FIELD_NAME_SCHEDULE_LIMIT, + Type::FIELD_NAME_SCHEDULE_LIMIT_ALLOWANCE, ], Type::INDEX_NAME_SCHEDULER_COVERING ) @@ -128,6 +130,7 @@ public function assembleSchemaChanges(): VersionInterface Type::FIELD_NAME_CAN_WORK_IN_PARALLEL, Type::FIELD_NAME_DEFAULT_IMPORTANCE, Type::FIELD_NAME_SCHEDULE_LIMIT, + Type::FIELD_NAME_SCHEDULE_LIMIT_ALLOWANCE, Type::FIELD_NAME_AUTO_COMPLETE_SUCCESS, Type::FIELD_NAME_AUTO_DELETE_INTERVAL_DURATION, ], diff --git a/src/Db/Setup/Schema/Version_4_0_0.yml b/src/Db/Setup/Schema/Version_4_0_0.yml new file mode 100644 index 00000000..c3bc7469 --- /dev/null +++ b/src/Db/Setup/Schema/Version_4_0_0.yml @@ -0,0 +1,7 @@ +services: + neighborhoods.kojo.db.setup.schema.version.4_0_0: + class: Neighborhoods\Kojo\Db\Setup\Schema\Version_4_0_0 + calls: + - [setDbConnectionContainerRepository, ["@db.connection.container.repository"]] + db.setup.schema.version.4_0_0: + alias: neighborhoods.kojo.db.setup.schema.version.4_0_0 \ No newline at end of file diff --git a/src/Db/Setup/Schema/Version_5_0_0.php b/src/Db/Setup/Schema/Version_5_0_0.php index 13a96f25..bb6c732f 100644 --- a/src/Db/Setup/Schema/Version_5_0_0.php +++ b/src/Db/Setup/Schema/Version_5_0_0.php @@ -1,12 +1,12 @@ addColumn( new Varchar( - JobInterface::FIELD_NAME_PROCESS_TYPE_CODE, 255, false, null, + JobInterface::FIELD_NAME_MOST_RECENT_HOST_NAME, 255, true, null, [ - 'comment' => 'The process type code used to run this job.', + 'comment' => 'COMMENT', + ])); + $createTable->addColumn( + new Integer( + JobInterface::FIELD_NAME_MOST_RECENT_PROCESS_ID, true, null, + [ + 'comment' => 'COMMENT', + 'unsigned' => true, ])); $createTable->addConstraint(new PrimaryKey(JobInterface::FIELD_NAME_ID)); $createTable->addConstraint( @@ -184,7 +191,6 @@ public function assembleSchemaChanges(): VersionInterface JobInterface::FIELD_NAME_NEXT_STATE_REQUEST, JobInterface::FIELD_NAME_ASSIGNED_STATE, JobInterface::FIELD_NAME_WORK_AT_DATE_TIME, - JobInterface::FIELD_NAME_PROCESS_TYPE_CODE, JobInterface::FIELD_NAME_PRIORITY, JobInterface::FIELD_NAME_TYPE_CODE, JobInterface::FIELD_NAME_CAN_WORK_IN_PARALLEL, diff --git a/src/Db/Setup/Schema/Version_5_0_0.yml b/src/Db/Setup/Schema/Version_5_0_0.yml new file mode 100644 index 00000000..af9b1ced --- /dev/null +++ b/src/Db/Setup/Schema/Version_5_0_0.yml @@ -0,0 +1,7 @@ +services: + neighborhoods.kojo.db.setup.schema.version.5_0_0: + class: Neighborhoods\Kojo\Db\Setup\Schema\Version_5_0_0 + calls: + - [setDbConnectionContainerRepository, ["@db.connection.container.repository"]] + db.setup.schema.version.5_0_0: + alias: neighborhoods.kojo.db.setup.schema.version.5_0_0 \ No newline at end of file diff --git a/src/Db/Setup/Schema/Version_6_0_0.php b/src/Db/Setup/Schema/Version_6_0_0.php deleted file mode 100644 index b70e3390..00000000 --- a/src/Db/Setup/Schema/Version_6_0_0.php +++ /dev/null @@ -1,60 +0,0 @@ -addColumn( - new BigInteger( - SqsInterface::FIELD_NAME_ID, false, null, - [ - 'comment' => 'The unique ID of this sqs auto-schedule record.', - 'identity' => true, - 'unsigned' => true, - ])); - $createTable->addColumn( - new Varchar( - SqsInterface::FIELD_NAME_JOB_TYPE_CODE, 255, false, null, - [ - 'comment' => 'The job type code to which this auto-schedule record relates.', - ])); - $createTable->addColumn( - new Varchar( - SqsInterface::FIELD_NAME_SQS_QUEUE_NAME, 255, false, null, - [ - 'comment' => 'The SQS queue name to which this auto-schedule record relates.', - ])); - $createTable->addConstraint( - new PrimaryKey( - SqsInterface::FIELD_NAME_ID, - SqsInterface::FIELD_NAME_ID - ) - ); - $createTable->addConstraint( - new Index( - [ - SqsInterface::FIELD_NAME_JOB_TYPE_CODE, - SqsInterface::FIELD_NAME_SQS_QUEUE_NAME, - ], - SqsInterface::INDEX_NAME_COVERING - ) - ); - - $this->_setSchemaChanges($createTable); - - return $this; - } -} \ No newline at end of file diff --git a/src/Db/SetupInterface.php b/src/Db/SetupInterface.php index d9806e56..53f6967b 100644 --- a/src/Db/SetupInterface.php +++ b/src/Db/SetupInterface.php @@ -1,9 +1,9 @@ _setSchemaChanges($dropTable); return $this; diff --git a/src/Db/TearDown/Schema/Version_0_0_0.yml b/src/Db/TearDown/Schema/Version_0_0_0.yml new file mode 100644 index 00000000..7745c2ca --- /dev/null +++ b/src/Db/TearDown/Schema/Version_0_0_0.yml @@ -0,0 +1,7 @@ +services: + neighborhoods.kojo.db.tear_down.schema.version.0_0_0: + class: Neighborhoods\Kojo\Db\TearDown\Schema\Version_0_0_0 + calls: + - [setDbConnectionContainerRepository, ["@db.connection.container.repository"]] + db.tear_down.schema.version.0_0_0: + alias: neighborhoods.kojo.db.tear_down.schema.version.0_0_0 \ No newline at end of file diff --git a/src/Db/TearDown/Schema/Version_1_0_0.php b/src/Db/TearDown/Schema/Version_1_0_0.php index 8dc457c6..f669811b 100644 --- a/src/Db/TearDown/Schema/Version_1_0_0.php +++ b/src/Db/TearDown/Schema/Version_1_0_0.php @@ -1,11 +1,11 @@ _setSchemaChanges($dropTable); - - return $this; - } -} \ No newline at end of file diff --git a/src/Db/TearDownInterface.php b/src/Db/TearDownInterface.php index 18ccb945..b8bb4a99 100644 --- a/src/Db/TearDownInterface.php +++ b/src/Db/TearDownInterface.php @@ -1,7 +1,7 @@ _addMessage($code); - } - - return $this; - } - - protected function _getPossibleMessages() - { - return $this->_possibleMessages; - } - - public function setCode($code) - { - $this->code = $code; - $this->message = ''; - $this->_addMessage($code); - - return $this; - } - - public function addMessage($additionalMessage) - { - $this->_pushMessage($additionalMessage); - - return $this; - } - - public function getPrettyPrintMessages() - { - $prettyPrintMessages = ""; - $messages = json_decode($this->getMessage()); - foreach ($messages as $message) { - $prettyPrintMessages .= $message . "\n"; - } - - return $prettyPrintMessages; - } - - protected function _getMessages() - { - $possibleMessages = $this->_getPossibleMessages(); - - return $possibleMessages; - } - - protected function _addMessage($code) - { - $messages = $this->_getMessages(); - if (isset($messages[$code])) { - $message = $messages[$code]; - }else { - $message = $messages[$code]; - } - - $this->_pushMessage($message); - - return $this; - } - - protected function _pushMessage($message) - { - if ($this->message === "") { - $messages = array(); - }else { - $messages = json_decode($this->message); - } - - $messages[] = $message; - $this->message = json_encode($messages); - - return $this; - } - - protected function _addPossibleMessage($code, $message) - { - $this->_possibleMessages[$code] = $message; - - return $this; - } -} \ No newline at end of file diff --git a/src/Exception/Runtime/Db/Model/LoadException.php b/src/Exception/Runtime/Db/Model/LoadException.php index 0d310151..6560be66 100644 --- a/src/Exception/Runtime/Db/Model/LoadException.php +++ b/src/Exception/Runtime/Db/Model/LoadException.php @@ -1,9 +1,9 @@ _possibleMessages[$code] = $message; + + return $this; + } + + protected function _init($message, $code) + { + if ($message === null) { + $this->_addMessage($code); + } + + return $this; + } + + public function setCode($code) + { + $this->code = $code; + $this->message = ''; + $this->_addMessage($code); + + return $this; + } + + protected function _addMessage($code) + { + $messages = $this->_getMessages(); + if (isset($messages[$code])) { + $message = $messages[$code]; + }else { + $message = $messages[$code]; + } + + $this->_pushMessage($message); + + return $this; + } + + protected function _getMessages() + { + $possibleMessages = $this->_getPossibleMessages(); + + return $possibleMessages; + } + + protected function _getPossibleMessages() + { + return $this->_possibleMessages; + } + + protected function _pushMessage($message) + { + if ($this->message === "") { + $messages = array(); + }else { + $messages = json_decode($this->message); + } + + $messages[] = $message; + $this->message = json_encode($messages); + + return $this; + } + + public function addMessage($additionalMessage) + { + $this->_pushMessage($additionalMessage); + + return $this; + } + + public function getPrettyPrintMessages() + { + $prettyPrintMessages = ""; + $messages = json_decode($this->getMessage()); + foreach ($messages as $message) { + $prettyPrintMessages .= $message . "\n"; + } + + return $prettyPrintMessages; + } } \ No newline at end of file diff --git a/src/Exception/Runtime/ExceptionInterface.php b/src/Exception/Runtime/ExceptionInterface.php new file mode 100644 index 00000000..b2cea9a6 --- /dev/null +++ b/src/Exception/Runtime/ExceptionInterface.php @@ -0,0 +1,16 @@ +_getSelector()->getWorkableJob(); - $this->setJob($job); - $this->_getLocator()->setJob($job); - if (is_callable($this->_getLocator()->getCallable())) { + $this->setJob($this->_getSelector()->getWorkableJob()); + $this->_getLocator()->setJob($this->_getJob()); + try{ + $this->_injectWorkerService(); $this->_updateJobAsWorking(); - $this->_instantiateWorker(); + $this->_runWorker(); $this->_updateJobAfterWork(); - }else { - $updatePanic = $this->_getServiceUpdatePanicFactory()->create(); - $updatePanic->setJob($job); - $updatePanic->save(); - throw new \RuntimeException('Panicking Job[' . $job->getId() . '].'); + }catch(Locator\Exception | \Error $throwable){ + $this->_panicJob(); + $jobId = $this->_getJob()->getId(); + throw new \RuntimeException("Panicking job with ID[$jobId].", 0, $throwable); } - $jobSemaphoreResource = $this->_getNewJobOwnerResource($job); - $this->_getSemaphore()->releaseLock($jobSemaphoreResource); + $this->_getSemaphore()->releaseLock($this->_getNewJobOwnerResource($this->_getJob())); if (!$this->_getJobType()->getCanWorkInParallel()) { $this->_publishMessage(); @@ -63,17 +62,28 @@ protected function _workWorker(): ForemanInterface return $this; } - protected function _instantiateWorker(): ForemanInterface + protected function _injectWorkerService(): ForemanInterface + { + $worker = $this->_getLocator()->getClass(); + if (method_exists($worker, 'setApiV1WorkerService')) { + $worker->setApiV1WorkerService($this->_getApiV1WorkerService()->setJob($this->_getJob())); + } + + return $this; + } + + protected function _runWorker(): ForemanInterface { - $job = $this->_getJob(); try{ - $this->_getLogger()->debug('Instantiating Worker for Job[' . $job->getId() . '].'); + $this->_getApmNewRelic()->startTransaction(); + $className = $this->_getLocator()->getClassName(); + $methodName = $this->_getLocator()->getMethodName(); + $this->_getApmNewRelic()->nameTransaction($className . '::' . $methodName); call_user_func($this->_getLocator()->getCallable()); - }catch(\Exception $exception){ - $updateCrash = $this->_getServiceUpdateCrashFactory()->create(); - $updateCrash->setJob($job); - $updateCrash->save(); - throw $exception; + $this->_getApmNewRelic()->endTransaction(); + }catch(\Exception $throwable){ + $this->_crashJob(); + throw $throwable; } return $this; @@ -81,17 +91,13 @@ protected function _instantiateWorker(): ForemanInterface protected function _updateJobAsWorking(): ForemanInterface { - $job = $this->_getJob(); try{ $updateWork = $this->_getServiceUpdateWorkFactory()->create(); - $updateWork->setJob($job); + $updateWork->setJob($this->_getJob()); $updateWork->save(); }catch(\Exception $exception){ - $updatePanic = $this->_getServiceUpdatePanicFactory()->create(); - $updatePanic->setJob($job); - $updatePanic->save(); - $jobSemaphoreResource = $this->_getNewJobOwnerResource($job); - $this->_getSemaphore()->releaseLock($jobSemaphoreResource); + $this->_panicJob(); + $this->_getSemaphore()->releaseLock($this->_getNewJobOwnerResource($this->_getJob())); throw $exception; } @@ -100,21 +106,15 @@ protected function _updateJobAsWorking(): ForemanInterface protected function _updateJobAfterWork(): ForemanInterface { - $job = $this->_getJob(); if ($this->_getJobType()->getAutoCompleteSuccess()) { $updateCompleteSuccess = $this->_getServiceUpdateCompleteSuccessFactory()->create(); - $updateCompleteSuccess->setJob($job); + $updateCompleteSuccess->setJob($this->_getJob()); $updateCompleteSuccess->save(); }else { - $stateService = $this->_getStateServiceClone(); - $job->load(); - $stateService->setJob($job); - if (!$this->_getWorkerJobService()->isRequestApplied() || !$stateService->isValidTransition()) { - $updateCrash = $this->_getServiceUpdateCrashFactory()->create(); - $updateCrash->setJob($job); - $updateCrash->save(); - $message = 'Worker related to Job with ID[' . $job->getId() . '] did not request a next state.'; - throw new \LogicException($message); + if (!$this->_getApiV1WorkerService()->isRequestApplied()) { + $this->_panicJob(); + $jobId = $this->_getJob()->getId(); + throw new \LogicException("Worker related to job with ID[$jobId] did not request a next state."); } } @@ -133,4 +133,22 @@ protected function _getJobType(): Job\TypeInterface { return $this->_getTypeRepository()->getJobType($this->_getJob()->getTypeCode()); } + + protected function _panicJob(): ForemanInterface + { + $updatePanic = $this->_getServiceUpdatePanicFactory()->create(); + $updatePanic->setJob($this->_getJob()); + $updatePanic->save(); + + return $this; + } + + protected function _crashJob(): ForemanInterface + { + $updateCrash = $this->_getServiceUpdateCrashFactory()->create(); + $updateCrash->setJob($this->_getJob()); + $updateCrash->save(); + + return $this; + } } \ No newline at end of file diff --git a/src/config/Foreman.yml b/src/Foreman.yml similarity index 75% rename from src/config/Foreman.yml rename to src/Foreman.yml index c687b03a..d89fe794 100644 --- a/src/config/Foreman.yml +++ b/src/Foreman.yml @@ -1,7 +1,8 @@ services: - nhds.jobs.foreman: - class: NHDS\Jobs\Foreman + neighborhoods.kojo.foreman: + class: Neighborhoods\Kojo\Foreman shared: false + public: false calls: - [setTypeRepository, ['@type.repository']] - [setSelector, ['@selector']] @@ -13,8 +14,10 @@ services: - [setServiceUpdateCrashFactory, ['@service.update.crash.factory']] - [setServiceUpdateCompleteSuccessFactory, ['@service.update.complete.success.factory']] - [setLogger, ['@process.pool.logger']] - - [setWorkerJobService, ['@worker.job.service']] + - [setApiV1WorkerService, ['@api.v1.worker.service']] - [setStateService, ['@state.service']] - [setMessageBroker, ['@message.broker.redis']] + - [setApmNewRelic, ['@apm.new_relic']] foreman: - alias: nhds.jobs.foreman \ No newline at end of file + alias: neighborhoods.kojo.foreman + public: false \ No newline at end of file diff --git a/src/Foreman/AwareTrait.php b/src/Foreman/AwareTrait.php index 48ff6a96..60b342bb 100644 --- a/src/Foreman/AwareTrait.php +++ b/src/Foreman/AwareTrait.php @@ -1,9 +1,9 @@ _rescheduleCrashedJobs(); $this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_RESCHEDULE_JOBS)->releaseLock(); }catch(\Exception $exception){ - $this->_getLogger()->debug('Received Exception with message "' . $exception->getMessage() . '"'); if ($this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_RESCHEDULE_JOBS)->hasLock()) { $this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_RESCHEDULE_JOBS)->releaseLock(); } @@ -64,7 +63,6 @@ protected function _rescheduleCrashedJobs(): Maintainer $jobSemaphoreResource->releaseLock(); } }catch(\Exception $exception){ - $this->_getLogger()->debug('Received Exception with message "' . $exception->getMessage() . '"'); if ($jobSemaphoreResource->hasLock()) { $jobSemaphoreResource->releaseLock(); } @@ -94,25 +92,27 @@ public function updatePendingJobs(): MaintainerInterface protected function _updatePendingJobs(): Maintainer { - foreach ($this->_getJobCollectionScheduleLimitCheck()->getIterator() as $job) { + foreach ($this->_getJobCollectionScheduleLimitCheck() as $job) { $jobType = $this->_getTypeRepository()->getJobType($job->getTypeCode()); - $scheduleLimit = $this->_getJobCollectionScheduleLimitByJobType($jobType); - $numberOfScheduledJobs = $scheduleLimit->getNumberOfCurrentlyScheduledJobs(); + $scheduleLimitCollection = $this->_getJobCollectionScheduleLimitByJobType($jobType); + $numberOfScheduledJobs = $scheduleLimitCollection->getNumberOfCurrentlyScheduledJobs(); + $scheduleLimit = $jobType->getScheduleLimit(); try{ - if ($numberOfScheduledJobs < $jobType->getScheduleLimit()) { + if ($numberOfScheduledJobs <= $scheduleLimit) { $waitUpdate = $this->_getServiceUpdateWaitFactory()->create(); $waitUpdate->setJob($job); $waitUpdate->save(); - }else { + }elseif ($numberOfScheduledJobs > $scheduleLimit + $jobType->getScheduleLimitAllowance()) { $failedLimitCheckUpdate = $this->_getServiceUpdateCompleteFailedScheduleLimitCheckFactory()->create(); $failedLimitCheckUpdate->setJob($job); $failedLimitCheckUpdate->save(); + $scheduleLimitCollection->decrementNumberOfCurrentlyScheduledJobs(); } }catch(\Exception $exception){ $updatePanic = $this->_getServiceUpdatePanicFactory()->create(); $updatePanic->setJob($job); $updatePanic->save(); - $this->_getLogger()->alert('Panicking Job[' . $job->getId() . '].'); + $this->_getLogger()->alert('Panicking job with ID[' . $job->getId() . '].'); } } diff --git a/src/config/Maintainer.yml b/src/Maintainer.yml similarity index 87% rename from src/config/Maintainer.yml rename to src/Maintainer.yml index aaeb8071..5969d1e1 100644 --- a/src/config/Maintainer.yml +++ b/src/Maintainer.yml @@ -1,7 +1,8 @@ services: - nhds.jobs.maintainer: - class: NHDS\Jobs\Maintainer + neighborhoods.kojo.maintainer: + class: Neighborhoods\Kojo\Maintainer shared: false + public: false calls: - [setSemaphore, ['@semaphore']] - [addSemaphoreResourceFactory, ['@semaphore.resource.factory-job']] @@ -18,4 +19,5 @@ services: - [setLogger, ['@process.pool.logger']] - [setMaintainerDelete, ['@maintainer.delete']] maintainer: - alias: nhds.jobs.maintainer \ No newline at end of file + alias: neighborhoods.kojo.maintainer + public: false \ No newline at end of file diff --git a/src/Maintainer/AwareTrait.php b/src/Maintainer/AwareTrait.php index 4dc9923c..b5f8d910 100644 --- a/src/Maintainer/AwareTrait.php +++ b/src/Maintainer/AwareTrait.php @@ -1,9 +1,9 @@ _deleteCompletedJobs(); $this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_MAINTAINER_DELETE)->releaseLock(); }catch(\Exception $exception){ - $this->_getLogger()->debug('Received Exception with message "' . $exception->getMessage() . '"'); if ($this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_MAINTAINER_DELETE)->hasLock()) { $this->_getSemaphoreResource(self::SEMAPHORE_RESOURCE_NAME_MAINTAINER_DELETE)->releaseLock(); } diff --git a/src/config/Maintainer/Delete.yml b/src/Maintainer/Delete.yml similarity index 71% rename from src/config/Maintainer/Delete.yml rename to src/Maintainer/Delete.yml index 386bc3ce..9593344d 100644 --- a/src/config/Maintainer/Delete.yml +++ b/src/Maintainer/Delete.yml @@ -1,6 +1,6 @@ services: - nhds.jobs.maintainer.delete: - class: NHDS\Jobs\Maintainer\Delete + neighborhoods.kojo.maintainer.delete: + class: Neighborhoods\Kojo\Maintainer\Delete calls: - [setLogger, ['@process.pool.logger']] - [setJobCollectionDelete, ['@data.job.collection.delete']] @@ -9,4 +9,4 @@ services: - [setPageSize, [50]] - [setOffset, [50]] maintainer.delete: - alias: nhds.jobs.maintainer.delete \ No newline at end of file + alias: neighborhoods.kojo.maintainer.delete \ No newline at end of file diff --git a/src/Maintainer/Delete/AwareTrait.php b/src/Maintainer/Delete/AwareTrait.php index 79330f10..663a62bc 100644 --- a/src/Maintainer/Delete/AwareTrait.php +++ b/src/Maintainer/Delete/AwareTrait.php @@ -1,9 +1,9 @@ _host === null) { - $this->_host = $host; - }else { - throw new \LogicException('Host is already set.'); - } - - return $this; - } public function setSubscriptionChannelName(string $channelName): BrokerInterface { @@ -37,24 +24,6 @@ public function setSubscriptionChannelName(string $channelName): BrokerInterface return $this; } - public function setPublishChannelName(string $channelName): BrokerInterface - { - if ($this->_publishChannelName === null) { - $this->_publishChannelName = $channelName; - } - - return $this; - } - - protected function _getHost(): string - { - if ($this->_host === null) { - throw new \LogicException('Host is not set.'); - } - - return $this->_host; - } - protected function _getSubscriptionChannelName(): string { if ($this->_subscriptionChannelName === null) { @@ -64,32 +33,21 @@ protected function _getSubscriptionChannelName(): string return $this->_subscriptionChannelName; } - protected function _getPublishChannelName(): string + public function setPublishChannelName(string $channelName): BrokerInterface { if ($this->_publishChannelName === null) { - throw new \LogicException('Publish channel name is not set.'); - } - - return $this->_publishChannelName; - } - - public function setPort(int $port): BrokerInterface - { - if ($this->_port === null) { - $this->_port = $port; - }else { - throw new \LogicException('Port is already set.'); + $this->_publishChannelName = $channelName; } return $this; } - protected function _getPort(): int + protected function _getPublishChannelName(): string { - if ($this->_port === null) { - throw new \LogicException('Port is not set.'); + if ($this->_publishChannelName === null) { + throw new \LogicException('Publish channel name is not set.'); } - return $this->_port; + return $this->_publishChannelName; } } \ No newline at end of file diff --git a/src/Message/Broker/BrokerInterface.php b/src/Message/Broker/BrokerInterface.php index bbc90b60..3c57ad80 100644 --- a/src/Message/Broker/BrokerInterface.php +++ b/src/Message/Broker/BrokerInterface.php @@ -1,7 +1,7 @@ _getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } @@ -29,10 +31,7 @@ public function waitForNewMessage(): BrokerInterface protected function _getRedisClient(): \Redis { if ($this->_redisClient === null) { - $this->_redisClient = new \Redis(); - // Do not use pconnet. - $this->_redisClient->connect($this->_getHost(), $this->_getPort()); - $this->_redisClient->setOption(\Redis::OPT_READ_TIMEOUT, '-1'); + $this->_redisClient = $this->_getRedisRepository()->getById(BrokerInterface::class); } return $this->_redisClient; @@ -44,7 +43,7 @@ public function hasMessage(): bool $publishChannelLength = $this->getPublishChannelLength(); $subscriptionChannelLength = $this->getSubscriptionChannelLength(); }catch(\Exception $exception){ - $this->_getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } @@ -59,7 +58,7 @@ public function getNextMessage(): string $message = $this->_getRedisClient()->rPop($this->_getPublishChannelName()); } }catch(\Exception $exception){ - $this->_getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } @@ -71,7 +70,7 @@ public function getPublishChannelLength(): int try{ $publishChannelLength = $this->_getRedisClient()->lLen($this->_getPublishChannelName()); }catch(\Exception $exception){ - $this->_getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } @@ -83,7 +82,7 @@ public function getSubscriptionChannelLength(): int try{ $subscriptionChannelLength = $this->_getRedisClient()->lLen($this->_getSubscriptionChannelName()); }catch(\Exception $exception){ - $this->_getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } @@ -95,17 +94,10 @@ public function publishMessage($message): BrokerInterface try{ $this->_getRedisClient()->lPush($this->_getPublishChannelName(), $message); }catch(\Exception $exception){ - $this->_getLogger()->warning($exception->getMessage()); + $this->_getLogger()->critical($exception->getMessage()); throw $exception; } return $this; } - - public function __destruct() - { - $this->_getRedisClient()->close(); - - return $this; - } } \ No newline at end of file diff --git a/src/Message/Broker/Redis.yml b/src/Message/Broker/Redis.yml new file mode 100644 index 00000000..cd9cc56a --- /dev/null +++ b/src/Message/Broker/Redis.yml @@ -0,0 +1,19 @@ +services: + neighborhoods.kojo.message.broker.redis: + class: Neighborhoods\Kojo\Message\Broker\Redis + shared: false + calls: + - [setLogger, ['@process.pool.logger']] + - [setSubscriptionChannelName, ['job_listener_subscribe']] + - [setPublishChannelName, ['job_listener_publish']] + - [setRedisRepository, ['@redis.repository']] + message.broker.redis: + alias: neighborhoods.kojo.message.broker.redis + neighborhoods.kojo.message.broker.redis[process.listener.mutex.redis]: + class: Neighborhoods\Kojo\Message\Broker\Redis + shared: false + calls: + - [setLogger, ['@process.pool.logger']] + - [setRedisRepository, ['@redis.repository']] + message.broker.redis[process.listener.mutex.redis]: + alias: neighborhoods.kojo.message.broker.redis[process.listener.mutex.redis] \ No newline at end of file diff --git a/src/Message/Broker/Type/Collection.php b/src/Message/Broker/Type/Collection.php index 061acb7d..ddf99744 100644 --- a/src/Message/Broker/Type/Collection.php +++ b/src/Message/Broker/Type/Collection.php @@ -1,10 +1,10 @@ _types[$typeCode])) { - throw new \LogicException('Process type is not set.'); + throw new \LogicException('Broker type is not set.'); } return clone $this->_types[$typeCode]; diff --git a/src/Message/Broker/Type/Collection.yml b/src/Message/Broker/Type/Collection.yml new file mode 100644 index 00000000..ca252f4b --- /dev/null +++ b/src/Message/Broker/Type/Collection.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.message.broker.type.collection-job: + class: Neighborhoods\Kojo\Message\Broker\Type\Collection + calls: + - [addBrokerType, ['job_broker', '@message.broker.redis']] + - [addBrokerType, ['process.listener.mutex.redis', '@message.broker.redis[process.listener.mutex.redis]']] + message.broker.type.collection-job: + alias: neighborhoods.kojo.message.broker.type.collection-job \ No newline at end of file diff --git a/src/Message/Broker/Type/Collection/AwareTrait.php b/src/Message/Broker/Type/Collection/AwareTrait.php index 1b6c690f..647461f0 100644 --- a/src/Message/Broker/Type/Collection/AwareTrait.php +++ b/src/Message/Broker/Type/Collection/AwareTrait.php @@ -1,10 +1,10 @@ _processPrototypes as $processPrototype) { $processPrototype->setProcessPool($pool); - $processPrototype->setParentProcessPath($pool->getProcessPath()); + $processPrototype->setParentProcessPath($pool->getProcess()->getPath()); + $processPrototype->setParentProcessUuid($pool->getProcess()->getUuid()); + $parentProcessTerminationSignalNumber = $pool->getProcess()->getTerminationSignalNumber(); + $processPrototype->setParentProcessTerminationSignalNumber($parentProcessTerminationSignalNumber); } return $this; diff --git a/src/Process/Collection.yml b/src/Process/Collection.yml new file mode 100644 index 00000000..d94f0643 --- /dev/null +++ b/src/Process/Collection.yml @@ -0,0 +1,33 @@ +services: + neighborhoods.kojo.process.collection: + shared: true + class: Neighborhoods\Kojo\Process\Collection + calls: + - [setIterator, ['@process.collection.iterator']] + - [addProcessPrototype, ['@process.listener.command']] + - [addProcessPrototype, ['@process.job']] + process.collection: + alias: neighborhoods.kojo.process.collection + neighborhoods.kojo.process.collection-server: + shared: true + class: Neighborhoods\Kojo\Process\Collection + calls: + - [setIterator, ['@process.collection.iterator']] + - [addProcessPrototype, ['@process.root']] + process.collection-server: + alias: neighborhoods.kojo.process.collection-server + neighborhoods.kojo.process.collection-job: + shared: true + class: Neighborhoods\Kojo\Process\Collection + calls: + - [setIterator, ['@process.collection.iterator']] + - [addProcessPrototype, ['@process.listener.mutex.redis']] + process.collection-job: + alias: neighborhoods.kojo.process.collection-job + neighborhoods.kojo.process.collection-empty: + shared: true + class: Neighborhoods\Kojo\Process\Collection + calls: + - [setIterator, ['@process.collection.iterator']] + process.collection-empty: + alias: neighborhoods.kojo.process.collection-empty \ No newline at end of file diff --git a/src/Process/Collection/AwareTrait.php b/src/Process/Collection/AwareTrait.php index e25b23d5..fdc3ceeb 100644 --- a/src/Process/Collection/AwareTrait.php +++ b/src/Process/Collection/AwareTrait.php @@ -1,9 +1,9 @@ _create(self::PROP_HAS_FORKED, true); - $processId = $this->_getProcessStrategy()->fork(); - if ($processId === self::FORK_FAILURE_CODE) { - throw new \RuntimeException('Failed to fork new process.'); - }elseif ($processId > 0) { - // This is executed in the Process Pool. - $this->_initialize($processId); - $this->_getLogger()->debug("Forked Process[{$this->getProcessId()}][{$this->getTypeCode()}]."); - }else { - // This is executed in the Process. - $this->_initialize(); - if ($this->_hasProcessPool()) { - $this->_getProcessPool()->emptyChildProcesses(); - $this->_unsetProcessPool(); - } - - $this->_getLogger()->debug("Running Process..."); - $this->_run(); - $this->_getLogger()->debug("Process finished running."); - $this->_exit(0); - } - - return $this; - } - - abstract protected function _run(): Forkable; -} \ No newline at end of file diff --git a/src/Process/Forked.php b/src/Process/Forked.php new file mode 100644 index 00000000..d8d35441 --- /dev/null +++ b/src/Process/Forked.php @@ -0,0 +1,36 @@ +_create(self::PROP_HAS_FORKED, true); + $processId = $this->_getProcessStrategy()->fork(); + if ($processId === self::FORK_FAILURE_CODE) { + throw new \RuntimeException('Failed to fork a new process.'); + }elseif ($processId > 0) { + // This is executed in the parent process. + $this->_setProcessId($processId); + }else { + // This is executed in the child process. + $this->_initialize(); + $this->_getProcessSignal()->decrementWaitCount(); + $this->_getProcessPool()->start(); + $this->_run(); + $this->exit(); + } + + return $this; + } + + abstract protected function _run(): Forked; +} \ No newline at end of file diff --git a/src/Process/Job.php b/src/Process/Job.php index c987d797..e1128fe4 100644 --- a/src/Process/Job.php +++ b/src/Process/Job.php @@ -1,31 +1,38 @@ _getSelector()->setProcess($this); - $this->_getBootstrap()->instantiate(); - $this->_getMaintainer()->rescheduleCrashedJobs(); - $this->_getScheduler()->scheduleStaticJobs(); - $this->_getMaintainer()->updatePendingJobs(); - $this->_getMaintainer()->deleteCompletedJobs(); - $this->_getForeman()->workWorker(); + try{ + $this->_getSelector()->setProcess($this); + $this->_getBootstrap()->instantiate(); + $this->_getMaintainer()->rescheduleCrashedJobs(); + $this->_getScheduler()->scheduleStaticJobs(); + $this->_getMaintainer()->updatePendingJobs(); + $this->_getMaintainer()->deleteCompletedJobs(); + $this->_getForeman()->workWorker(); + }catch(\Throwable $throwable){ + $this->_getLogger()->critical($throwable->getMessage()); + $this->_setOrReplaceExitCode(255); + } return $this; } diff --git a/src/Process/Job.yml b/src/Process/Job.yml new file mode 100644 index 00000000..207c747f --- /dev/null +++ b/src/Process/Job.yml @@ -0,0 +1,20 @@ +services: + neighborhoods.kojo.process.job: + class: Neighborhoods\Kojo\Process\Job + public: true + shared: false + parent: process_abstract + calls: + - [setForeman, ['@foreman']] + - [setMaintainer, ['@maintainer']] + - [setScheduler, ['@scheduler']] + - [setBootstrap, ['@worker.bootstrap']] + - [setTypeCode, ['job']] + - [setSelector, ['@selector']] + - [setProcessStrategy, ['@process.strategy.process_control']] + - [setTerminationSignalNumber, ['@=constant("SIGTERM")']] + - [setUuidMaximumInteger, [9999999999]] + - [setProcessPoolFactory, ['@process.pool.factory-job']] + - [setTitlePrefix, ['%process.title.prefix%']] + process.job: + alias: neighborhoods.kojo.process.job \ No newline at end of file diff --git a/src/Process/Job/Required.php b/src/Process/Job/Required.php deleted file mode 100644 index f2fd9cc3..00000000 --- a/src/Process/Job/Required.php +++ /dev/null @@ -1,11 +0,0 @@ -_getLogger()->debug('Adding Process with type code "' . $processTypeCode . '".'); $process = $this->_getProcessCollection()->getProcessPrototypeClone($processTypeCode); $this->_getProcessPool()->addChildProcess($process); @@ -62,7 +61,7 @@ protected function _getExpressionLanguage(): ExpressionLanguage return $this->_read(self::PROP_EXPRESSION_LANGUAGE); } - protected function _run(): Forkable + protected function _run(): Forked { if (!$this->_getMessageBroker()->hasMessage()) { $this->_getMessageBroker()->waitForNewMessage(); diff --git a/src/Process/Listener/Command.yml b/src/Process/Listener/Command.yml new file mode 100644 index 00000000..b3468c7e --- /dev/null +++ b/src/Process/Listener/Command.yml @@ -0,0 +1,19 @@ +services: + neighborhoods.kojo.process.listener.command: + class: Neighborhoods\Kojo\Process\Listener\Command + public: true + shared: false + parent: process_abstract + calls: + - [setTypeCode, ['listener.command']] + - [setBrokerTypeCollection, ['@neighborhoods.kojo.message.broker.type.collection-job']] + - [setBrokerTypeCode, ['job_broker']] + - [setExpressionLanguage, ['@symfony.component.expressionlanguage.expressionlanguage']] + - [setProcessCollection, ['@process.collection']] + - [setProcessStrategy, ['@process.strategy.process_control']] + - [setTerminationSignalNumber, ['@=constant("SIGKILL")']] + - [setUuidMaximumInteger, [9999999999]] + - [setProcessPoolFactory, ['@process.pool.factory-empty']] + - [setTitlePrefix, ['%process.title.prefix%']] + process.listener.command: + alias: neighborhoods.kojo.process.listener.command \ No newline at end of file diff --git a/src/Process/Listener/CommandInterface.php b/src/Process/Listener/CommandInterface.php index 5f5088d1..074bb4c8 100644 --- a/src/Process/Listener/CommandInterface.php +++ b/src/Process/Listener/CommandInterface.php @@ -1,9 +1,9 @@ _register(); + + return $this; + } + + protected function _register(): ProcessInterface + { + $this->_getRedis()->client('SETNAME', $this->getParentProcessUuid()); + $this->_getMessageBroker()->setPublishChannelName($this->getParentProcessUuid()); + $this->_getMessageBroker()->setSubscriptionChannelName($this->getParentProcessUuid()); + $this->_getMessageBroker()->waitForNewMessage(); + posix_kill($this->getParentProcessId(), $this->getParentProcessTerminationSignalNumber()); + + return $this; + } + + public function processMessages(): ListenerInterface + { + throw new \RuntimeException('The connection to redis was lost.'); + } + + public function hasMessages(): bool + { + return true; + } + + protected function _getRedis(): \Redis + { + if (!$this->_exists(self::PROP_REDIS)) { + $this->_create(self::PROP_REDIS, $this->_getRedisFactory()->create()); + } + + return $this->_read(self::PROP_REDIS); + } +} \ No newline at end of file diff --git a/src/Process/Listener/Mutex/Redis.yml b/src/Process/Listener/Mutex/Redis.yml new file mode 100644 index 00000000..b087a8e9 --- /dev/null +++ b/src/Process/Listener/Mutex/Redis.yml @@ -0,0 +1,19 @@ +services: + neighborhoods.kojo.process.listener.mutex.redis: + class: Neighborhoods\Kojo\Process\Listener\Mutex\Redis + public: true + shared: false + parent: process_abstract + calls: + - [setTypeCode, ['listener.mutex.redis']] + - [setProcessStrategy, ['@process.strategy.process_control']] + - [setTerminationSignalNumber, ['@=constant("SIGKILL")']] + - [setUuidMaximumInteger, [9999999999]] + - [setBrokerTypeCollection, ['@neighborhoods.kojo.message.broker.type.collection-job']] + - [setBrokerTypeCode, ['process.listener.mutex.redis']] + - [setProcessPoolFactory, ['@process.pool.factory-empty']] + - [setRedisFactory, ['@redis.factory']] + - [setTitlePrefix, ['%process.title.prefix%']] + process.listener.mutex.redis: + alias: neighborhoods.kojo.process.listener.mutex.redis + public: false \ No newline at end of file diff --git a/src/Process/Listener/Mutex/RedisInterface.php b/src/Process/Listener/Mutex/RedisInterface.php new file mode 100644 index 00000000..0000f91a --- /dev/null +++ b/src/Process/Listener/Mutex/RedisInterface.php @@ -0,0 +1,10 @@ +_create(self::PROP_STARTED, true); $this->_initialize(); - $this->_getLogger()->info("Process pool started."); - // Register signals to be handled. - pcntl_sigprocmask(SIG_BLOCK, $this->_waitSignals); - while (true) { - $this->_getLogger()->debug("Waiting for signal..."); - $this->_signalInformation = []; - pcntl_sigwaitinfo($this->_waitSignals, $this->_signalInformation); - - switch ($this->_signalInformation[self::SIGNAL_NUMBER]) { - case SIGCHLD: - $this->_childExitSignal(); - break; - case SIGALRM: - $this->_alarmSignal(); - break; - case SIGINT: - case SIGTERM: - $this->_getLogger()->debug('Handling termination signal...'); - $this->terminateChildProcesses(); - break 2; - default: - throw new \UnexpectedValueException('Unexpected blocked signal.'); - } - } - $this->_getLogger()->info('Exiting process pool.'); + return $this; + } + + public function handleSignal(InformationInterface $signalInformation): HandlerInterface + { + $signalNumber = $signalInformation->getSignalNumber(); + switch ($signalNumber) { + case SIGCHLD: + $this->_childExitSignal($signalInformation); + break; + case SIGALRM: + $this->_alarmSignal($signalInformation); + break; + default: + throw new \UnexpectedValueException("Unexpected signal number[$signalNumber]."); + } return $this; } - protected function _childExitSignal(): PoolInterface + protected function _childExitSignal(InformationInterface $information): PoolInterface { - while ($childProcessId = pcntl_wait($status, WNOHANG)) { - if ($childProcessId == -1) { - $this->_processControlWaitError(); - } - $childProcessExitCode = pcntl_wexitstatus($status); - $this->_getLogger()->debug("Process[$childProcessId] exited with code [$childProcessExitCode]"); - $childProcess = $this->getChildProcess($childProcessId)->setExitCode($childProcessExitCode); + $childProcessId = $information->getProcessId(); + if (isset($this->_childProcesses[$childProcessId])) { + $childProcessExitCode = $information->getExitValue(); + $childProcess = $this->getChildProcess($information->getProcessId())->setExitCode($childProcessExitCode); $this->_getProcessPoolStrategy()->childProcessExited($childProcess); $this->_validateAlarm(); + $this->_getProcessPoolStrategy()->currentPendingChildExitsCompleted(); + }else { + $processId = $this->_getProcess()->getProcessId(); + $this->_getLogger()->notice("Child process[$childProcessId] is not in the pool for process[$processId]."); } - $this->_getLogger()->debug('Number of child processes in pool: ' . $this->getCountOfChildProcesses()); - $this->_getProcessPoolStrategy()->currentPendingChildExitsCompleted(); return $this; } - public function getCountOfChildProcesses(): int + public function freeChildProcess(int $childProcessId): PoolInterface { - return count($this->_childProcesses); + if (isset($this->_childProcesses[$childProcessId])) { + if ($this->_childProcesses[$childProcessId] instanceof ProcessInterface) { + $typeCode = $this->_childProcesses[$childProcessId]->getTypeCode(); + $this->_getLogger()->info("Freeing child process related to process[$childProcessId][$typeCode]."); + unset($this->_childProcesses[$childProcessId]); + }else { + $message = "Process associated to process[$childProcessId] is not an expected type."; + throw new \UnexpectedValueException($message); + } + }else { + throw new \LogicException("Process associated to process[$childProcessId] is not in the process pool."); + } + + return $this; } - protected function _processControlWaitError() + public function getCountOfChildProcesses(): int { - $waitErrorString = var_export(pcntl_strerror(pcntl_get_last_error()), true); - $this->_getLogger()->emergency('Received wait error, error string: "' . $waitErrorString . '".'); - $signalInformation = var_export($this->_signalInformation, true); - $this->_getLogger()->emergency('Received wait error, signal information: ' . $signalInformation); - throw new \RuntimeException('Unrecoverable process control wait error.'); + return count($this->_childProcesses); } public function addChildProcess(ProcessInterface $childProcess): PoolInterface { - if ($this->isFull()) { - throw new \LogicException('Process pool is full.'); - }else { - $childProcess->start(); - $this->_childProcesses[$childProcess->getProcessId()] = $childProcess; + try{ + $this->_getProcessSignal()->incrementWaitCount(); + if ($this->isFull()) { + throw new \LogicException('Process pool is full.'); + }else { + $childProcess->start(); + $this->_childProcesses[$childProcess->getProcessId()] = $childProcess; + $message = "Forked process[{$childProcess->getProcessId()}][{$childProcess->getTypeCode()}]."; + $this->_getLogger()->info($message); + } + $this->_getProcessSignal()->decrementWaitCount(); + }catch(\Throwable $throwable){ + $this->_getProcessSignal()->decrementWaitCount(); + throw $throwable; } return $this; @@ -99,46 +101,24 @@ public function addChildProcess(ProcessInterface $childProcess): PoolInterface public function getChildProcess(int $childProcessId): ProcessInterface { if (!isset($this->_childProcesses[$childProcessId])) { - throw new \LogicException("Process is with process ID $childProcessId not set."); + throw new \LogicException("Process with process ID[$childProcessId] not set."); } return $this->_childProcesses[$childProcessId]; } - public function freeChildProcess(int $childProcessId): PoolInterface - { - if (isset($this->_childProcesses[$childProcessId])) { - if ($this->_childProcesses[$childProcessId] instanceof ProcessInterface) { - $typeCode = $this->_childProcesses[$childProcessId]->getTypeCode(); - $this->_getLogger()->debug("Freeing child process related to Process[$childProcessId][$typeCode]."); - unset($this->_childProcesses[$childProcessId]); - }else { - $message = "Process associated to Process[$childProcessId] is not an expected type."; - throw new \UnexpectedValueException($message); - } - }else { - throw new \LogicException("Process associated to Process[$childProcessId] is not in the process pool."); - } - - return $this; - } - public function terminateChildProcesses(): PoolInterface { + $this->_getProcessSignal()->block(); if (!empty($this->_childProcesses)) { - $numberOfProcesses = $this->getCountOfChildProcesses(); - $this->_getLogger()->debug("Sending termination signal to $numberOfProcesses child processes..."); /** @var ProcessInterface $process */ foreach ($this->_childProcesses as $process) { $processId = $process->getProcessId(); + $terminationSignalNumber = $process->getTerminationSignalNumber(); $processTypeCode = $process->getTypeCode(); - if ($process instanceof ListenerInterface) { - posix_kill($processId, SIGKILL); - $this->_getLogger()->debug("Sent SIGKILL to Process[$processId][$processTypeCode]."); - }else { - posix_kill($processId, SIGTERM); - $this->_getLogger()->debug("Sent SIGTERM to Process[$processId][$processTypeCode]."); - } + posix_kill($processId, $terminationSignalNumber); + $message = "Sent kill($terminationSignalNumber) to process[$processId][$processTypeCode]."; + $this->_getLogger()->info($message); unset($this->_childProcesses[$processId]); } } diff --git a/src/Process/Pool.yml b/src/Process/Pool.yml new file mode 100644 index 00000000..98577634 --- /dev/null +++ b/src/Process/Pool.yml @@ -0,0 +1,9 @@ +services: + neighborhoods.kojo.process.pool: + class: Neighborhoods\Kojo\Process\Pool + shared: false + calls: + - [setLogger, ['@process.pool.logger']] + - [setProcessSignal, ['@process.signal']] + process.pool: + alias: neighborhoods.kojo.process.pool \ No newline at end of file diff --git a/src/Process/Pool/AwareTrait.php b/src/Process/Pool/AwareTrait.php index 08409391..903b3e96 100644 --- a/src/Process/Pool/AwareTrait.php +++ b/src/Process/Pool/AwareTrait.php @@ -1,9 +1,9 @@ _getLogger()->info('Starting process pool server...'); if ($this->_getSemaphore()->testAndSetLock($this->_getServerSemaphoreResource())) { $this->_getLogger()->info('Process pool server started.'); - $this->setProcessPool($this->_getProcessPoolFactory()->create()); - $this->_getProcessPool()->setProcess($this); $this->_getProcessPool()->start(); - $this->_getProcessPool()->emptyChildProcesses(); - $this->_unsetProcessPool(); - $this->_getLogger()->info('Stopping process pool server.'); - $this->_getSemaphore()->releaseLock($this->_getServerSemaphoreResource()); - $this->_getLogger()->info('Process pool server stopped.'); + while (true) { + $this->_getProcessSignal()->waitForSignal(); + } }else { - $this->_getLogger()->info('Cannot obtain process pool server mutex. Quitting.'); + $this->_getLogger()->info('Cannot obtain the process pool server mutex. Quitting.'); } return $this; diff --git a/src/Process/Pool/Server.yml b/src/Process/Pool/Server.yml new file mode 100644 index 00000000..a17d5064 --- /dev/null +++ b/src/Process/Pool/Server.yml @@ -0,0 +1,17 @@ +services: + neighborhoods.kojo.process.pool.server: + class: Neighborhoods\Kojo\Process\Pool\Server + public: true + shared: false + parent: process_abstract + calls: + - [setSemaphore, ['@semaphore']] + - [addSemaphoreResourceFactory, ['@semaphore.resource.factory-server']] + - [setProcessPoolFactory, ['@process.pool.factory-server']] + - [setTypeCode, ['server']] + - [setTerminationSignalNumber, ['@=constant("SIGTERM")']] + - [setUuidMaximumInteger, [9999999999]] + - [setTitlePrefix, ['%process.title.prefix%']] + process.pool.server: + public: true + alias: neighborhoods.kojo.process.pool.server \ No newline at end of file diff --git a/src/Process/Pool/ServerInterface.php b/src/Process/Pool/ServerInterface.php index 72a673d4..84dea3f6 100644 --- a/src/Process/Pool/ServerInterface.php +++ b/src/Process/Pool/ServerInterface.php @@ -1,9 +1,9 @@ _listenerProcessExited($process); }else { - throw new \UnexpectedValueException('Unexpected process class.'); + $className = get_class($process); + throw new \UnexpectedValueException("Unexpected process class[$className]."); } return $this; @@ -29,11 +30,13 @@ protected function _listenerProcessExited(ListenerInterface $listenerProcess): S if ($listenerProcess->getExitCode() !== 0) { $this->_pauseListenerProcess($listenerProcess); }else { - $this->_getLogger()->debug('Processing listener messages...'); - while (!$this->_getProcessPool()->isFull() && $listenerProcess->hasMessages()) { + while ( + $listenerProcess->hasMessages() + && !$this->_getProcessPool()->isFull() + && $this->_getProcessPool()->canEnvironmentSustainAdditionProcesses() + ) { $listenerProcess->processMessages(); } - $this->_getLogger()->debug('Finished processing listener messages.'); if ($this->_getProcessPool()->isFull()) { $this->_pauseListenerProcess($listenerProcess); @@ -68,10 +71,7 @@ public function currentPendingChildExitsCompleted(): StrategyInterface protected function _jobProcessExited(JobInterface $jobProcess): Strategy { $this->_getProcessPool()->freeChildProcess($jobProcess->getProcessId()); - if ($jobProcess->getExitCode() !== 0) { - $processId = $jobProcess->getProcessId(); - $this->_getLogger()->debug("Replacing process for exit error from Process[$processId]."); - $this->_getLogger()->debug("Throttling replacement process for Process[$processId]]."); + if ($jobProcess->getExitCode() !== 0 && $this->_getProcessPool()->canEnvironmentSustainAdditionProcesses()) { $typeCode = $jobProcess->getTypeCode(); $replacementProcess = $this->_getProcessCollection()->getProcessPrototypeClone($typeCode); $replacementProcess->setThrottle($this->getChildProcessWaitThrottle()); @@ -86,11 +86,7 @@ protected function _jobProcessExited(JobInterface $jobProcess): Strategy public function receivedAlarm(): StrategyInterface { - $this->_getLogger()->debug("Received alarm signal."); - if ($this->_getProcessPool()->isFull()) { - $this->_getLogger()->notice("Process pool is full."); - $this->_getLogger()->notice("Could not allocate process for alarm signal."); - }else { + if (!$this->_getProcessPool()->isFull() && $this->_getProcessPool()->canEnvironmentSustainAdditionProcesses()) { if ($this->_hasPausedListenerProcess()) { $this->_unPauseListenerProcesses(); }else { @@ -110,10 +106,10 @@ public function initializePool(): StrategyInterface { $this->_getProcessPool()->setAlarm($this->getMaxAlarmTime()); $this->_getProcessCollection()->applyProcessPool($this->_getProcessPool()); - foreach ($this->_getProcessCollection()->getIterator() as $process) { + foreach ($this->_getProcessCollection() as $process) { $this->_getProcessPool()->addChildProcess($process); } - if ($this->_hasFillProcessTypeCode()) { + if ($this->_hasFillProcessTypeCode() && $this->_getProcessPool()->canEnvironmentSustainAdditionProcesses()) { while (!$this->_getProcessPool()->isFull()) { $fillProcessTypeCode = $this->_getFillProcessTypeCode(); $fillProcess = $this->_getProcessCollection()->getProcessPrototypeClone($fillProcessTypeCode); @@ -128,7 +124,6 @@ protected function _pauseListenerProcess(ListenerInterface $listenerProcess): St { $listenerProcessId = $listenerProcess->getProcessId(); if (!isset($this->_pausedListenerProcesses[$listenerProcessId])) { - $this->_getLogger()->debug('Pausing Listener[' . $listenerProcessId . '].'); $this->_getProcessPool()->freeChildProcess($listenerProcessId); $this->_pausedListenerProcesses[$listenerProcessId] = $listenerProcess; }else { @@ -149,7 +144,6 @@ protected function _unPauseListenerProcesses(): Strategy foreach ($this->_pausedListenerProcesses as $processId => $listenerProcess) { if (!$this->_getProcessPool()->isFull()) { $typeCode = $listenerProcess->getTypeCode(); - $this->_getLogger()->debug('Un-pausing Listener[' . $processId . '][' . $typeCode . '].'); $newListenerProcess = $this->_getProcessCollection()->getProcessPrototypeClone($typeCode); while (!$this->_getProcessPool()->isFull() && $listenerProcess->hasMessages()) { $listenerProcess->processMessages(); diff --git a/src/Process/Pool/Strategy.yml b/src/Process/Pool/Strategy.yml new file mode 100644 index 00000000..87c6f545 --- /dev/null +++ b/src/Process/Pool/Strategy.yml @@ -0,0 +1,32 @@ +parameters: + process.pool.strategy.maximum_load_average: 10.0 + process.pool.strategy-server.maximum_load_average: 10.0 + process.pool.strategy-job.maximum_load_average: 10.0 +services: + neighborhoods.kojo.process.pool.strategy: + shared: false + class: Neighborhoods\Kojo\Process\Pool\Strategy + calls: + - [setAlarmProcessTypeCode, ['job']] + - [setLogger, ['@process.pool.logger']] + - [setMaximumLoadAverage, ['%process.pool.strategy.maximum_load_average%']] + process.pool.strategy: + alias: neighborhoods.kojo.process.pool.strategy + neighborhoods.kojo.process.pool.strategy-server: + shared: false + class: Neighborhoods\Kojo\Process\Pool\Strategy + calls: + - [setAlarmProcessTypeCode, ['root']] + - [setFillProcessTypeCode, ['root']] + - [setLogger, ['@process.pool.logger']] + - [setMaximumLoadAverage, ['%process.pool.strategy-server.maximum_load_average%']] + process.pool.strategy-server: + alias: neighborhoods.kojo.process.pool.strategy-server + neighborhoods.kojo.process.pool.strategy-job: + shared: false + class: Neighborhoods\Kojo\Process\Pool\Strategy + calls: + - [setLogger, ['@process.pool.logger']] + - [setMaximumLoadAverage, ['%process.pool.strategy-job.maximum_load_average%']] + process.pool.strategy-job: + alias: neighborhoods.kojo.process.pool.strategy-job \ No newline at end of file diff --git a/src/Process/Pool/Strategy/AwareTrait.php b/src/Process/Pool/Strategy/AwareTrait.php index 58e89b36..ca0071de 100644 --- a/src/Process/Pool/Strategy/AwareTrait.php +++ b/src/Process/Pool/Strategy/AwareTrait.php @@ -1,9 +1,9 @@ _read(self::PROP_FILL_PROCESS_TYPE_CODE); } + + public function setMaximumLoadAverage(float $maximumLoadAverage): StrategyInterface + { + $this->_create(self::PROP_MAXIMUM_LOAD_AVERAGE, $maximumLoadAverage); + + return $this; + } + + public function getMaximumLoadAverage(): float + { + return $this->_read(self:: PROP_MAXIMUM_LOAD_AVERAGE); + } } \ No newline at end of file diff --git a/src/Process/Pool/StrategyInterface.php b/src/Process/Pool/StrategyInterface.php index 0fa9b309..3bca034e 100644 --- a/src/Process/Pool/StrategyInterface.php +++ b/src/Process/Pool/StrategyInterface.php @@ -1,14 +1,21 @@ _getLogger()->debug('Setting alarm for ' . $seconds . ' seconds.'); + if ($seconds === 0) { + $this->_getLogger()->info("Disabling any existing alarm."); + }else { + $this->_getLogger()->info("Setting alarm for $seconds seconds."); + } pcntl_alarm($seconds); return $this; @@ -35,30 +43,27 @@ public function setAlarm(int $seconds): PoolInterface public function isEmpty(): bool { - return (bool)($this->getCountOfChildProcesses() === 0); + return ($this->getCountOfChildProcesses() === 0); } public function isFull(): bool { - if ((float)current(sys_getloadavg()) > self::MAX_LOAD_AVERAGE) { - $isFull = true; - }else { - $maxChildProcesses = $this->_getProcessPoolStrategy()->getMaxChildProcesses(); - $isFull = (bool)($this->getCountOfChildProcesses() >= $maxChildProcesses); - } + return ($this->getCountOfChildProcesses() >= $this->_getProcessPoolStrategy()->getMaxChildProcesses()); + } - return $isFull; + public function canEnvironmentSustainAdditionProcesses(): bool + { + return ((float)current(sys_getloadavg()) <= $this->_getProcessPoolStrategy()->getMaximumLoadAverage()); } protected function _initialize(): PoolInterface { - register_shutdown_function([$this, 'terminateChildProcesses']); $this->_getProcessPoolStrategy()->initializePool(); return $this; } - protected function _alarmSignal(): PoolInterface + protected function _alarmSignal(InformationInterface $information): PoolInterface { $this->_getProcessPoolStrategy()->receivedAlarm(); @@ -81,8 +86,8 @@ protected function _validateAlarm(): PoolInterface return $this; } - public function getProcessPath(): string + public function getProcess(): ProcessInterface { - return $this->_getProcess()->getPath(); + return $this->_getProcess(); } } \ No newline at end of file diff --git a/src/Process/PoolInterface.php b/src/Process/PoolInterface.php index 9f37e3a9..6c441e94 100644 --- a/src/Process/PoolInterface.php +++ b/src/Process/PoolInterface.php @@ -1,12 +1,13 @@ getProcessId(); + if (isset($this->_processes[$processId])) { + throw new \LogicException("Process with ID[$processId] is already set."); + } + + $this->_processes[$processId] = $process; + + return $this; + } + + public function getLastRegisteredProcess(): ProcessInterface + { + return end($this->_processes); + } +} \ No newline at end of file diff --git a/src/Process/Registry.yml b/src/Process/Registry.yml new file mode 100644 index 00000000..ec5be0dd --- /dev/null +++ b/src/Process/Registry.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.process.registry: + class: Neighborhoods\Kojo\Process\Registry + public: false + shared: true + process.registry: + alias: neighborhoods.kojo.process.registry + public: false \ No newline at end of file diff --git a/src/Process/Registry/AwareTrait.php b/src/Process/Registry/AwareTrait.php new file mode 100644 index 00000000..20e74faa --- /dev/null +++ b/src/Process/Registry/AwareTrait.php @@ -0,0 +1,38 @@ +_create(RegistryInterface::class, $registry); + + return $this; + } + + public function hasProcessRegistry(): bool + { + return $this->_exists(RegistryInterface::class); + } + + protected function _getProcessRegistry(): RegistryInterface + { + return $this->_read(RegistryInterface::class); + } + + protected function _getProcessRegistryClone(): RegistryInterface + { + return clone $this->_getProcessRegistry(); + } + + protected function _unsetProcessRegistry(): self + { + $this->_delete(RegistryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Process/RegistryInterface.php b/src/Process/RegistryInterface.php new file mode 100644 index 00000000..ad41282d --- /dev/null +++ b/src/Process/RegistryInterface.php @@ -0,0 +1,13 @@ +setTypeCode(self::TYPE_CODE); } - protected function _run(): Forkable + protected function _run(): Forked { - $this->setProcessPool($this->_getProcessPoolFactory()->create()); - $this->_getProcessPool()->setProcess($this); - $this->_getProcessPool()->start(); + while (true) { + $this->_getProcessSignal()->waitForSignal(); + } return $this; } diff --git a/src/Process/Root.yml b/src/Process/Root.yml new file mode 100644 index 00000000..82c9c1b9 --- /dev/null +++ b/src/Process/Root.yml @@ -0,0 +1,15 @@ +services: + neighborhoods.kojo.process.root: + class: Neighborhoods\Kojo\Process\Root + public: true + shared: false + parent: process_abstract + calls: + - [setProcessPoolFactory, ['@process.pool.factory']] + - [setProcessStrategy, ['@process.strategy.process_control']] + - [setTerminationSignalNumber, ['@=constant("SIGTERM")']] + - [setUuidMaximumInteger, [9999999999]] + - [setTitlePrefix, ['%process.title.prefix%']] + process.root: + alias: neighborhoods.kojo.process.root + public: false \ No newline at end of file diff --git a/src/Process/Signal.php b/src/Process/Signal.php new file mode 100644 index 00000000..3624026e --- /dev/null +++ b/src/Process/Signal.php @@ -0,0 +1,125 @@ +incrementWaitCount(); + pcntl_async_signals(true); + $this->_signalHandlers[$signalNumber] = $signalHandler; + pcntl_signal($signalNumber, [$this, 'handleSignal']); + $this->decrementWaitCount(); + + return $this; + } + + public function incrementWaitCount(): SignalInterface + { + ++$this->_waitCount; + + return $this; + } + + public function decrementWaitCount(): SignalInterface + { + $this->block(); + if ($this->_waitCount === 1) { + $this->_processBufferedSignals(); + } + --$this->_waitCount; + $this->unBlock(); + + return $this; + } + + protected function _processBufferedSignals(): SignalInterface + { + foreach ($this->_bufferedSignals as $position => $information) { + unset($this->_bufferedSignals[$position]); + call_user_func([$this->_getSignalHandler($information->getSignalNumber()), 'handleSignal'], $information); + } + + return $this; + } + + protected function _getSignalHandler(int $signalNumber): HandlerInterface + { + if (!isset($this->_signalHandlers[$signalNumber])) { + throw new \LogicException("Signal handler for signal number[$signalNumber] is not set."); + } + + return $this->_signalHandlers[$signalNumber]; + } + + /** + * Signals are "blocked" by PHP while the IRQ handling logic is executed + * from the context of being called by the VM as a signal handler. + */ + public function handleSignal(int $signalNumber, $signalInformation): void + { + if ($signalNumber === SIGCHLD) { + while ($childProcessId = pcntl_wait($status, WNOHANG)) { + if ($childProcessId == -1) { + $errorMessage = var_export(pcntl_strerror(pcntl_get_last_error()), true); + $this->_getLogger()->notice("Received a process control wait error with message[$errorMessage]."); + break; + }else { + $this->_getLogger()->info("Child with process ID[$childProcessId] exited with status[$status]."); + $childInformation[InformationInterface::SIGNAL_NUMBER] = SIGCHLD; + $childInformation[InformationInterface::PROCESS_ID] = $childProcessId; + $childInformation[InformationInterface::EXIT_VALUE] = $status; + $information = $this->_getProcessSignalInformationFactory()->create()->hydrate($childInformation); + $this->_bufferedSignals[] = $information; + } + } + }else { + $information = $this->_getProcessSignalInformationFactory()->create()->hydrate($signalInformation); + $this->_getLogger()->info("Handling signal number[{$information->getSignalNumber()}]."); + $this->_bufferedSignals[] = $information; + } + if ($this->_waitCount === 0) { + $this->_processBufferedSignals(); + } + + return; + } + + public function waitForSignal(): SignalInterface + { + $this->block(); + $signalNumber = pcntl_sigwaitinfo(array_keys($this->_signalHandlers), $signalInformation); + $this->handleSignal($signalNumber, $signalInformation); + $this->unBlock(); + + return $this; + } + + public function block(): SignalInterface + { + pcntl_sigprocmask(SIG_BLOCK, array_keys($this->_signalHandlers)); + + return $this; + } + + public function unBlock(): SignalInterface + { + pcntl_sigprocmask(SIG_UNBLOCK, array_keys($this->_signalHandlers)); + + return $this; + } +} \ No newline at end of file diff --git a/src/Process/Signal.yml b/src/Process/Signal.yml new file mode 100644 index 00000000..d7e0d701 --- /dev/null +++ b/src/Process/Signal.yml @@ -0,0 +1,11 @@ +services: + neighborhoods.kojo.process.signal: + class: Neighborhoods\Kojo\Process\Signal + public: false + shared: true + calls: + - [setLogger, ['@process.pool.logger']] + - [setProcessSignalInformationFactory, ['@process.signal.information.factory']] + process.signal: + alias: neighborhoods.kojo.process.signal + public: false \ No newline at end of file diff --git a/src/Process/Signal/AwareTrait.php b/src/Process/Signal/AwareTrait.php new file mode 100644 index 00000000..7fdd4e9a --- /dev/null +++ b/src/Process/Signal/AwareTrait.php @@ -0,0 +1,38 @@ +_create(SignalInterface::class, $processSignal); + + return $this; + } + + protected function _getProcessSignal(): SignalInterface + { + return $this->_read(SignalInterface::class); + } + + protected function _getProcessSignalClone(): SignalInterface + { + return clone $this->_getProcessSignal(); + } + + protected function _hasProcessSignal(): bool + { + return $this->_exists(SignalInterface::class); + } + + protected function _unsetProcessSignal(): self + { + $this->_delete(SignalInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Process/Signal/HandlerInterface.php b/src/Process/Signal/HandlerInterface.php new file mode 100644 index 00000000..9786ad90 --- /dev/null +++ b/src/Process/Signal/HandlerInterface.php @@ -0,0 +1,9 @@ +_information === null) { + $this->_information = $information; + } + + return $this; + } + + public function getSignalNumber(): int + { + if (!isset($this->_information[self::SIGNAL_NUMBER])) { + throw new \RuntimeException('Signal number is not set.'); + } + + return $this->_information[self::SIGNAL_NUMBER]; + } + + public function getErrorNumber(): int + { + if (!isset($this->_information[self::ERROR_NUMBER])) { + throw new \RuntimeException('Error number is not set.'); + } + + return $this->_information[self::ERROR_NUMBER]; + } + + public function getSignalCode(): int + { + if (!isset($this->_information[self::SIGNAL_CODE])) { + throw new \RuntimeException('Signal code is not set.'); + } + + return $this->_information[self::SIGNAL_CODE]; + } + + public function hasExitValue(): bool + { + return isset($this->_information[self::EXIT_VALUE]) ? true : false; + } + + public function getExitValue(): int + { + if (!isset($this->_information[self::EXIT_VALUE])) { + throw new \LogicException('Exit value is not set.'); + } + + return $this->_information[self::EXIT_VALUE]; + } + + public function hasUserTimeConsumed(): bool + { + return isset($this->_information[self::USER_TIME_CONSUMED]) ? true : false; + } + + public function getUserTimeConsumed(): int + { + if (!isset($this->_information[self::USER_TIME_CONSUMED])) { + throw new \LogicException('User time consumed is not set.'); + } + + return $this->_information[self::USER_TIME_CONSUMED]; + } + + public function hasSystemTimeConsumed(): bool + { + return isset($this->_information[self::SYSTEM_TIME_CONSUMED]) ? true : false; + } + + public function getSystemTimeConsumed(): int + { + if (!isset($this->_information[self::SYSTEM_TIME_CONSUMED])) { + throw new \LogicException('System time consumed is not set.'); + } + + return $this->_information[self::SYSTEM_TIME_CONSUMED]; + } + + public function hasProcessId(): bool + { + return isset($this->_information[self::PROCESS_ID]) ? true : false; + } + + public function getProcessId(): int + { + if (!isset($this->_information[self::PROCESS_ID])) { + throw new \LogicException('Process ID is not set.'); + } + + return $this->_information[self::PROCESS_ID]; + } + + public function hasUserId(): bool + { + return isset($this->_information[self::USER_ID]) ? true : false; + } + + public function getUserId(): int + { + if (!isset($this->_information[self::USER_ID])) { + throw new \LogicException('User ID is not set.'); + } + + return $this->_information[self::USER_ID]; + } + + public function hasSegmentationFaultAddress(): bool + { + return isset($this->_information[self::SEGMENTATION_FAULT_ADDRESS]) ? true : false; + } + + public function getSegmentationFaultAddress(): int + { + if (!isset($this->_information[self::SEGMENTATION_FAULT_ADDRESS])) { + throw new \LogicException('Segmentation fault address is not set.'); + } + + return $this->_information[self::SEGMENTATION_FAULT_ADDRESS]; + } + + public function hasBandEvent(): bool + { + return isset($this->_information[self::BAND_EVENT]) ? true : false; + } + + public function getBandEvent(): int + { + if (!isset($this->_information[self::BAND_EVENT])) { + throw new \LogicException('Band event is not set.'); + } + + return $this->_information[self::BAND_EVENT]; + } + + public function hasFileDescriptorNumber(): bool + { + return isset($this->_information[self::FILE_DESCRIPTOR_NUMBER]) ? true : false; + } + + public function getFileDescriptorNumber(): int + { + if (!isset($this->_information[self::FILE_DESCRIPTOR_NUMBER])) { + throw new \LogicException('File descriptor number is not set.'); + } + + return $this->_information[self::FILE_DESCRIPTOR_NUMBER]; + } +} \ No newline at end of file diff --git a/src/Process/Signal/Information.yml b/src/Process/Signal/Information.yml new file mode 100644 index 00000000..10335c39 --- /dev/null +++ b/src/Process/Signal/Information.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.process.signal.information: + class: Neighborhoods\Kojo\Process\Signal\Information + public: false + shared: false + process.signal.information: + public: false + alias: neighborhoods.kojo.process.signal.information \ No newline at end of file diff --git a/src/Process/Signal/Information/AwareTrait.php b/src/Process/Signal/Information/AwareTrait.php new file mode 100644 index 00000000..22c21a3e --- /dev/null +++ b/src/Process/Signal/Information/AwareTrait.php @@ -0,0 +1,38 @@ +_create(InformationInterface::class, $processSignalInformation); + + return $this; + } + + protected function _getProcessSignalInformation(): InformationInterface + { + return $this->_read(InformationInterface::class); + } + + protected function _getProcessSignalInformationClone(): InformationInterface + { + return clone $this->_getProcessSignalInformation(); + } + + protected function _hasProcessSignalInformation(): bool + { + return $this->_exists(InformationInterface::class); + } + + protected function _unsetProcessSignalInformation(): self + { + $this->_delete(InformationInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Process/Signal/Information/Factory.php b/src/Process/Signal/Information/Factory.php new file mode 100644 index 00000000..a9185d0b --- /dev/null +++ b/src/Process/Signal/Information/Factory.php @@ -0,0 +1,20 @@ +_getProcessSignalInformationClone(); + + return $signalInformation; + } +} \ No newline at end of file diff --git a/src/Process/Signal/Information/Factory.yml b/src/Process/Signal/Information/Factory.yml new file mode 100644 index 00000000..2c7b68cc --- /dev/null +++ b/src/Process/Signal/Information/Factory.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.process.signal.information.factory: + class: Neighborhoods\Kojo\Process\Signal\Information\Factory + public: false + shared: false + calls: + - [setProcessSignalInformation, ['@process.signal.information']] + process.signal.information.factory: + public: false + alias: neighborhoods.kojo.process.signal.information.factory \ No newline at end of file diff --git a/src/Process/Signal/Information/Factory/AwareTrait.php b/src/Process/Signal/Information/Factory/AwareTrait.php new file mode 100644 index 00000000..952595cd --- /dev/null +++ b/src/Process/Signal/Information/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $processSignalInformationFactory); + + return $this; + } + + protected function _getProcessSignalInformationFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _getProcessSignalInformationFactoryClone(): FactoryInterface + { + return clone $this->_getProcessSignalInformationFactory(); + } + + protected function _hasProcessSignalInformationFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetProcessSignalInformationFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Process/Signal/Information/FactoryInterface.php b/src/Process/Signal/Information/FactoryInterface.php new file mode 100644 index 00000000..7b273874 --- /dev/null +++ b/src/Process/Signal/Information/FactoryInterface.php @@ -0,0 +1,11 @@ +_setParentProcessId(posix_getppid()); - $this->_setProcessId(posix_getpid()); - $this->_getLogger()->setProcess($this); - $this->_registerSignalHandlers(); - cli_set_process_title($this->getPath()); - }else { - $this->_setProcessId($processId); + use Apm\NewRelic\AwareTrait; + protected $_exitCode = 0; + + protected function _initialize(): ProcessAbstract + { + $this->_getApmNewRelic()->ignoreTransaction(); + $this->_getApmNewRelic()->endTransaction(); + $this->_getProcessSignal()->incrementWaitCount(); + $this->_setParentProcessId(posix_getppid()); + $this->_setProcessId(posix_getpid()); + + $this->_getLogger()->setProcess($this); + if ($this->_hasProcessPool()) { + $this->_getProcessPool()->emptyChildProcesses(); + $this->_getProcessPool()->getProcess()->unregisterShutdownMethod(); + $this->_unsetProcessPool(); } + $this->setProcessPool($this->_getProcessPoolFactory()->create()); + $this->_getProcessPool()->setProcess($this); + $this->_registerSignalHandlers(); + $this->_registerShutdownMethod(); + $this->_getProcessRegistry()->pushProcess($this); + $this->_setProcessTitle(); + $this->_getProcessSignal()->decrementWaitCount(); return $this; } protected function _registerSignalHandlers(): ProcessInterface { - pcntl_signal(SIGTERM, [$this, 'receivedSignal']); - pcntl_signal(SIGINT, [$this, 'receivedSignal']); + $this->_getProcessSignal()->addSignalHandler(SIGCHLD, $this->_getProcessPool()); + $this->_getProcessSignal()->addSignalHandler(SIGALRM, $this->_getProcessPool()); + $this->_getProcessSignal()->addSignalHandler(SIGTERM, $this); + $this->_getProcessSignal()->addSignalHandler(SIGINT, $this); + $this->_getProcessSignal()->addSignalHandler(SIGHUP, $this); + $this->_getProcessSignal()->addSignalHandler(SIGQUIT, $this); + $this->_getProcessSignal()->addSignalHandler(SIGABRT, $this); + + return $this; + } + + protected function _setProcessTitle(): ProcessInterface + { + $this->_create(self::PROP_IS_PROCESS_TITLE_SET, true); + cli_set_process_title($this->_getTitlePrefix() . $this->getPath()); + + return $this; + } + + public function setTitlePrefix(string $titlePrefix): ProcessInterface + { + $this->_create(self::PROP_TITLE_PREFIX, $titlePrefix); + + return $this; + } + + protected function _getTitlePrefix(): string + { + return $this->_read(self::PROP_TITLE_PREFIX); + } + + public function handleSignal(InformationInterface $information): HandlerInterface + { + $this->_getProcessSignal()->block(); + $this->exit(); + + return $this; + } + + protected function _setOrReplaceExitCode(int $exitCode): ProcessInterface + { + $this->_exitCode = $exitCode; + + return $this; + } + + public function exit(): void + { + $this->_getProcessSignal()->block(); + $this->unregisterShutdownMethod(); + $this->_getProcessPool()->terminateChildProcesses(); + exit($this->_exitCode); + } + + public function shutdown(): ProcessInterface + { + if ($this->_read(self::PROP_IS_SHUTDOWN_METHOD_ACTIVE)) { + $this->_getLogger()->critical("Shutdown method invoked."); + $this->_setOrReplaceExitCode(255); + $this->exit(); + } + + return $this; + } + + protected function _registerShutdownMethod(): ProcessInterface + { + $this->_create(self::PROP_IS_SHUTDOWN_METHOD_ACTIVE, true); + register_shutdown_function([$this, 'shutdown']); + + return $this; + } + + public function unregisterShutdownMethod(): ProcessInterface + { + $this->_update(self::PROP_IS_SHUTDOWN_METHOD_ACTIVE, false); return $this; } @@ -125,14 +210,66 @@ public function getExitCode(): int return $this->_read(self::PROP_EXIT_CODE); } - public function receivedSignal() + public function setTerminationSignalNumber(int $terminationSignalNumber): ProcessInterface + { + $this->_create(self::PROP_TERMINATION_SIGNAL_NUMBER, $terminationSignalNumber); + + return $this; + } + + public function getTerminationSignalNumber(): int + { + return $this->_read(self::PROP_TERMINATION_SIGNAL_NUMBER); + } + + public function getParentProcessTerminationSignalNumber(): int + { + return $this->_read(self::PROP_PARENT_PROCESS_TERMINATION_SIGNAL_NUMBER); + } + + public function setParentProcessTerminationSignalNumber(int $parentProcessTerminationSignalNumber) + { + $this->_create(self::PROP_PARENT_PROCESS_TERMINATION_SIGNAL_NUMBER, $parentProcessTerminationSignalNumber); + + return $this; + } + + public function setParentProcessUuid(string $parentProcessUuid): ProcessInterface + { + $this->_create(self::PROP_PARENT_PROCESS_UUID, $parentProcessUuid); + + return $this; + } + + public function getParentProcessUuid(): string { - $this->_exit(0); + return $this->_read(self::PROP_PARENT_PROCESS_UUID); + } + + public function getUuid(): string + { + if (!$this->_exists(self::PROP_UUID)) { + $hostname = gethostname(); + $processUuid = $hostname + . '-' . gethostbyname($hostname) + . '-' . $this->getPath() + . '-' . sprintf('%f', microtime(true)) + . '-' . random_int(0, $this->_getUuidMaximumInteger()); + $this->_create(self::PROP_UUID, $processUuid); + } + + return $this->_read(self::PROP_UUID); + } + + public function setUuidMaximumInteger(int $uuidMaximumInteger): ProcessInterface + { + $this->_create(self::PROP_UUID_MAXIMUM_INTEGER, $uuidMaximumInteger); + + return $this; } - protected function _exit(int $exitCode) + protected function _getUuidMaximumInteger(): int { - $this->_getLogger()->debug("Exiting Process."); - exit($exitCode); + return $this->_read(self::PROP_UUID_MAXIMUM_INTEGER); } } \ No newline at end of file diff --git a/src/ProcessAbstract.yml b/src/ProcessAbstract.yml new file mode 100644 index 00000000..675a20d9 --- /dev/null +++ b/src/ProcessAbstract.yml @@ -0,0 +1,14 @@ +services: + neighborhoods.kojo.process_abstract: + class: Neighborhoods\Kojo\ProcessAbstract + abstract: true + public: false + shared: false + calls: + - [setProcessRegistry, ['@process.registry']] + - [setLogger, ['@process.pool.logger']] + - [setProcessSignal, ['@process.signal']] + - [setApmNewRelic, ['@apm.new_relic']] + process_abstract: + alias: neighborhoods.kojo.process_abstract + public: false \ No newline at end of file diff --git a/src/ProcessInterface.php b/src/ProcessInterface.php index e54f3f04..bd358bd3 100644 --- a/src/ProcessInterface.php +++ b/src/ProcessInterface.php @@ -1,13 +1,30 @@ connect($this->_getHost(), $this->_getPort()); + if ($this->_hasOptions()) { + foreach ($this->_getOptions() as $optionName => $optionValue) { + $redis->setOption($optionName, $optionValue); + } + } + + return $redis; + } + + public function setPort(int $port): FactoryInterface + { + $this->_create(self::PROP_PORT, $port); + + return $this; + } + + protected function _getPort(): int + { + return $this->_read(self::PROP_PORT); + } + + public function setHost(string $host): FactoryInterface + { + $this->_create(self::PROP_HOST, $host); + + return $this; + } + + protected function _getHost(): string + { + return $this->_read(self::PROP_HOST); + } + + public function addOption(int $optionName, string $optionValue): FactoryInterface + { + if (isset($this->_options[$optionName])) { + $optionValue = $this->_options[$optionName]; + throw new \LogicException("Option [$optionName] is already set with value [$optionValue]."); + } + + $this->_options[$optionName] = $optionValue; + + return $this; + } + + protected function _hasOptions(): bool + { + return !empty($this->_options); + } + + protected function _getOptions(): array + { + return $this->_options; + } +} \ No newline at end of file diff --git a/src/Redis/Factory.yml b/src/Redis/Factory.yml new file mode 100644 index 00000000..484d0f75 --- /dev/null +++ b/src/Redis/Factory.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.redis.factory: + class: Neighborhoods\Kojo\Redis\Factory + public: false + shared: true + calls: + - [addOption, [!php/const \Redis::OPT_READ_TIMEOUT, '-1']] + - [setHost, ['%neighborhoods.kojo.environment.parameters.redis_host%']] + - [setPort, ['%neighborhoods.kojo.environment.parameters.redis_port%']] + redis.factory: + alias: neighborhoods.kojo.redis.factory + public: false \ No newline at end of file diff --git a/src/Redis/Factory/AwareTrait.php b/src/Redis/Factory/AwareTrait.php new file mode 100644 index 00000000..4b4a8b2c --- /dev/null +++ b/src/Redis/Factory/AwareTrait.php @@ -0,0 +1,38 @@ +_create(FactoryInterface::class, $factory); + + return $this; + } + + protected function _hasRedisFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _getRedisFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _getRedisFactoryClone(): FactoryInterface + { + return clone $this->_getRedisFactory(); + } + + protected function _unsetRedisFactory() + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Redis/FactoryInterface.php b/src/Redis/FactoryInterface.php new file mode 100644 index 00000000..6435eb87 --- /dev/null +++ b/src/Redis/FactoryInterface.php @@ -0,0 +1,20 @@ +_getProcessRegistry()->getLastRegisteredProcess()->getUuid(); + if (!isset($this->_redisCollection[$id])) { + $this->_redisCollection[$id] = $this->_getRedisFactory()->create(); + } + + return $this->_redisCollection[$id]; + } +} \ No newline at end of file diff --git a/src/Redis/Repository.yml b/src/Redis/Repository.yml new file mode 100644 index 00000000..673e3985 --- /dev/null +++ b/src/Redis/Repository.yml @@ -0,0 +1,11 @@ +services: + neighborhoods.kojo.redis.repository: + class: Neighborhoods\Kojo\Redis\Repository + public: false + shared: true + calls: + - [setProcessRegistry, ['@process.registry']] + - [setRedisFactory, ['@redis.factory']] + redis.repository: + alias: neighborhoods.kojo.redis.repository + public: false \ No newline at end of file diff --git a/src/Redis/Repository/AwareTrait.php b/src/Redis/Repository/AwareTrait.php new file mode 100644 index 00000000..fa6121a1 --- /dev/null +++ b/src/Redis/Repository/AwareTrait.php @@ -0,0 +1,38 @@ +_create(RepositoryInterface::class, $redisRepository); + + return $this; + } + + protected function _getRedisRepository(): RepositoryInterface + { + return $this->_read(RepositoryInterface::class); + } + + protected function _getRedisRepositoryClone(): RepositoryInterface + { + return clone $this->_getRedisRepository(); + } + + protected function _hasRedisRepository(): bool + { + return $this->_exists(RepositoryInterface::class); + } + + protected function _unsetRedisRepository(): self + { + $this->_delete(RepositoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Redis/RepositoryInterface.php b/src/Redis/RepositoryInterface.php new file mode 100644 index 00000000..bffb42d3 --- /dev/null +++ b/src/Redis/RepositoryInterface.php @@ -0,0 +1,15 @@ +format(self::DATE_TIME_FORMAT_CACHE_MINUTE); - $cacheItemPool = $this->_getCacheItemPool(); + $cacheItemPool = $this->_getCacheItemPoolRepository()->getById(self::CACHE_ITEM_POOL_ID); $hasItem = $cacheItemPool->hasItem(self::CACHE_SCHEDULED_AHEAD_KEY_PREFIX . $referenceMinuteDateTimeString); if ($hasItem) { $isMinuteScheduled = true; @@ -60,7 +60,7 @@ protected function _getScheduledKeyLifetime(): \DateTime public function cacheScheduledMinutes(\DateTime $scheduledMinute): CacheInterface { - $cacheItemPool = $this->_getCacheItemPool(); + $cacheItemPool = $this->_getCacheItemPoolRepository()->getById(self::CACHE_ITEM_POOL_ID); $cachedMinuteDateTimeString = $scheduledMinute->format(self::DATE_TIME_FORMAT_CACHE_MINUTE); $cacheItem = $cacheItemPool->getItem(self::CACHE_SCHEDULED_AHEAD_KEY_PREFIX . $cachedMinuteDateTimeString); $cacheItem->set(self::CACHE_SCHEDULED_AHEAD_VALUE); diff --git a/src/Scheduler/Cache.yml b/src/Scheduler/Cache.yml new file mode 100644 index 00000000..16a4ede3 --- /dev/null +++ b/src/Scheduler/Cache.yml @@ -0,0 +1,10 @@ +services: + neighborhoods.kojo.scheduler.cache: + class: Neighborhoods\Kojo\Scheduler\Cache + shared: true + calls: + - [setSchedulerTime, ['@scheduler.time']] + - [setCacheItemPoolRepository, ['@cache_item_pool.repository']] + - [setTime, ['@neighborhoods.pylon.time']] + scheduler.cache: + alias: neighborhoods.kojo.scheduler.cache \ No newline at end of file diff --git a/src/Scheduler/Cache/AwareTrait.php b/src/Scheduler/Cache/AwareTrait.php index 02c5f766..2cf39713 100644 --- a/src/Scheduler/Cache/AwareTrait.php +++ b/src/Scheduler/Cache/AwareTrait.php @@ -1,9 +1,9 @@ offset($this->_collectionIterations * $this->_getPageSize()); $select->limit($this->_getPageSize()); $jobCandidates = $this->_getSelectorJobCollection()->getModelsArray(); + $numberOfJobCandidates = count($jobCandidates); $publishedMessages = $this->_getMessageBroker()->getPublishChannelLength(); - foreach ($this->_getSelectorJobCollection()->getIterator() as $jobCandidate) { - $processTypeCode = $jobCandidate->getProcessTypeCode(); - $message = json_encode(['command' => "commandProcess.addProcess('$processTypeCode')"]); - $this->_getMessageBroker()->publishMessage($message); - ++$publishedMessages; - if ($publishedMessages >= count($jobCandidates)) { + while (true) { + $message = json_encode(['command' => "commandProcess.addProcess('job')"]); + if ($publishedMessages >= $numberOfJobCandidates) { break; } + $this->_getMessageBroker()->publishMessage($message); + $publishedMessages = $this->_getMessageBroker()->getPublishChannelLength(); } - $select->where->and->equalTo(JobInterface::FIELD_NAME_PROCESS_TYPE_CODE, $this->_getProcess()->getTypeCode()); while (!empty($jobCandidates)) { foreach ($this->_getSelectorJobCollection()->getIterator() as $jobCandidate) { diff --git a/src/config/Selector.yml b/src/Selector.yml similarity index 75% rename from src/config/Selector.yml rename to src/Selector.yml index cabc7e62..1ce59e5c 100644 --- a/src/config/Selector.yml +++ b/src/Selector.yml @@ -1,6 +1,7 @@ services: - nhds.jobs.selector: - class: NHDS\Jobs\Selector + neighborhoods.kojo.selector: + class: Neighborhoods\Kojo\Selector + public: false shared: true calls: - [setPageSize, [50]] @@ -13,4 +14,5 @@ services: - [setStateService, ['@state.service']] - [setRandomIntMax, [10]] selector: - alias: nhds.jobs.selector \ No newline at end of file + alias: neighborhoods.kojo.selector + public: false \ No newline at end of file diff --git a/src/Selector/AwareTrait.php b/src/Selector/AwareTrait.php index ee049b37..0052468a 100644 --- a/src/Selector/AwareTrait.php +++ b/src/Selector/AwareTrait.php @@ -1,9 +1,9 @@ _create(SemaphoreInterface::class, $semaphore); @@ -23,4 +23,16 @@ protected function _getSemaphoreClone(): SemaphoreInterface { return clone $this->_getSemaphore(); } + + protected function _hasSemaphore(): bool + { + return $this->_exists(SemaphoreInterface::class); + } + + protected function _unsetSemaphore(): self + { + $this->_delete(SemaphoreInterface::class); + + return $this; + } } \ No newline at end of file diff --git a/src/Semaphore/Mutex/AwareTrait.php b/src/Semaphore/Mutex/AwareTrait.php index ce1aeda8..b758af7e 100644 --- a/src/Semaphore/Mutex/AwareTrait.php +++ b/src/Semaphore/Mutex/AwareTrait.php @@ -1,9 +1,9 @@ _hasLock === false) { if (flock($this->_getLockFilePointer(), $this->_getFlockLockOperation()) === true) { - $this->_getLogger()->debug('Obtained lock for file "' . $this->_getFilePath() . '".'); $this->_hasLock = true; } }else { @@ -44,7 +43,6 @@ public function releaseLock(): MutexInterface if (flock($this->_getLockFilePointer(), LOCK_UN) === false) { $this->_throwNewFilesystemException(Runtime\Filesystem::CODE_UNLOCK_FAILED); } - $this->_getLogger()->debug('Released lock for file "' . $this->_getFilePath() . '".'); $this->_hasLock = false; if (fclose($this->_getLockFilePointer()) === false) { $this->_throwNewFilesystemException(Runtime\Filesystem::CODE_FCLOSE_FAILED); diff --git a/src/config/Semaphore/Mutex/Flock.yml b/src/Semaphore/Mutex/Flock.yml similarity index 59% rename from src/config/Semaphore/Mutex/Flock.yml rename to src/Semaphore/Mutex/Flock.yml index e9c99ec8..f8d13655 100644 --- a/src/config/Semaphore/Mutex/Flock.yml +++ b/src/Semaphore/Mutex/Flock.yml @@ -1,6 +1,6 @@ services: - nhds.jobs.semaphore.mutex.flock: - class: NHDS\Jobs\Semaphore\Mutex\Flock + neighborhoods.kojo.semaphore.mutex.flock: + class: Neighborhoods\Kojo\Semaphore\Mutex\Flock shared: false calls: - [setFileMode, ['c']] @@ -8,4 +8,4 @@ services: - [setDirectoryPathPrefix, ['/tmp/']] - [setLogger, ['@process.pool.logger']] semaphore.mutex.flock: - alias: nhds.jobs.semaphore.mutex.flock \ No newline at end of file + alias: neighborhoods.kojo.semaphore.mutex.flock \ No newline at end of file diff --git a/src/Semaphore/Mutex/Redis.php b/src/Semaphore/Mutex/Redis.php new file mode 100644 index 00000000..cb6e175e --- /dev/null +++ b/src/Semaphore/Mutex/Redis.php @@ -0,0 +1,117 @@ +_hasLock === false) { + $key = $this->_getKey(); + $processUUID = $this->_getProcessUuid(); + $this->_getRedisClient()->watch($key); + + // If the mutex resource ID is set, then check if the owning client is connected. + $mutexKeyValue = $this->_getRedisClient()->get($key); + if (!empty($mutexKeyValue)) { + $mutexClientIsConnected = false; + + // Get a list of connected clients. + $clients = $this->_getRedisClient()->client('LIST'); + foreach ($clients as $client) { + if ($client['name'] === $mutexKeyValue) { + $mutexClientIsConnected = true; + break; + } + } + + // If the client that registered for the mutex resource ID is connected, the mutex is held by another client. + if ($mutexClientIsConnected === false) { + // If not, try to obtain the lock by registering on the mutex resource ID. + $this->_getRedisClient()->multi(); + $this->_getRedisClient()->set($key, $processUUID); + $reply = $this->_getRedisClient()->exec(); + + // If the mutex resource ID was not set by another client, the mutex is obtained by this client. + if ($reply[0] === true) { + $this->_hasLock = true; + } + } + }else { + // If the mutex resource ID is not set, try to obtain the mutex. + $this->_getRedisClient()->multi(); + $this->_getRedisClient()->set($key, $processUUID); + $reply = $this->_getRedisClient()->exec(); + if (is_array($reply) && $reply[0] === true) { + $this->_hasLock = true; + }elseif ($reply !== false) { + $type = gettype($reply); + throw new \UnexpectedValueException("Reply is of type [$type]"); + } + } + }else { + throw new \LogicException('The mutex already has obtained a lock.'); + } + + return $this->_hasLock; + } + + public function releaseLock(): MutexInterface + { + if ($this->_hasLock === true) { + $this->_getRedisClient()->del($this->_getKey()); + $this->_hasLock = false; + }else { + throw new \LogicException('The mutex has not obtained a lock.'); + } + + return $this; + } + + public function hasLock(): bool + { + return $this->_hasLock; + } + + protected function _getProcessUuid(): string + { + return $this->_getProcessRegistry()->getLastRegisteredProcess()->getUuid(); + } + + protected function _getKey(): string + { + if (!$this->_exists(self::PROP_KEY)) { + $key = '/' . $this->_getResource()->getResourcePath() . '/' . $this->_getResource()->getResourceName(); + $this->_create(self::PROP_KEY, $key); + } + + return $this->_read(self::PROP_KEY); + } + + protected function _getRedisClient(): \Redis + { + if (!$this->_exists(self::PROP_REDIS)) { + $redis = $this->_getRedisRepository()->getById(RedisInterface::class); + $redis->client('SETNAME', $this->_getProcessUuid()); + $this->_create(self::PROP_REDIS, $redis); + } + + return $this->_read(self::PROP_REDIS); + } +} \ No newline at end of file diff --git a/src/Semaphore/Mutex/Redis.yml b/src/Semaphore/Mutex/Redis.yml new file mode 100644 index 00000000..790bb6ee --- /dev/null +++ b/src/Semaphore/Mutex/Redis.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.semaphore.mutex.redis: + class: Neighborhoods\Kojo\Semaphore\Mutex\Redis + shared: false + public: false + calls: + - [setLogger, ['@process.pool.logger']] + - [setRedisRepository, ['@redis.repository']] + - [setProcessRegistry, ['@process.registry']] + semaphore.mutex.redis: + alias: neighborhoods.kojo.semaphore.mutex.redis + public: false \ No newline at end of file diff --git a/src/Semaphore/Mutex/RedisInterface.php b/src/Semaphore/Mutex/RedisInterface.php new file mode 100644 index 00000000..0d0254c2 --- /dev/null +++ b/src/Semaphore/Mutex/RedisInterface.php @@ -0,0 +1,10 @@ +_read(ResourceInterface::class); } + + protected function _hasSemaphoreResource(): bool + { + return $this->_exists(SemaphoreInterface::class); + } + + protected function _unsetSemaphoreResource(): self + { + $this->_delete(SemaphoreInterface::class); + + return $this; + } } \ No newline at end of file diff --git a/src/Semaphore/Resource/Factory.php b/src/Semaphore/Resource/Factory.php index fd88940c..ad2efa49 100644 --- a/src/Semaphore/Resource/Factory.php +++ b/src/Semaphore/Resource/Factory.php @@ -1,11 +1,11 @@ _exists(self::PROP_IMPORTANCE)) { $importance = $this->_read(self::PROP_IMPORTANCE); }else { - $importance = (int) $persistentJobTypeProperties[Job\TypeInterface::FIELD_NAME_DEFAULT_IMPORTANCE]; + $importance = (int)$persistentJobTypeProperties[Job\TypeInterface::FIELD_NAME_DEFAULT_IMPORTANCE]; } unset($persistentJobTypeProperties[Job\TypeInterface::FIELD_NAME_DEFAULT_IMPORTANCE]); }else { - throw new \RuntimeException('Job type with type code ' . $jobType->getCode() . 'is not enabled.'); + throw new \RuntimeException('Job type with type code[' . $jobType->getCode() . '] is not enabled.'); } $job = $this->_getJob(); diff --git a/src/Service/Create.yml b/src/Service/Create.yml new file mode 100644 index 00000000..281dcf4f --- /dev/null +++ b/src/Service/Create.yml @@ -0,0 +1,9 @@ +services: + neighborhoods.kojo.service.create: + class: Neighborhoods\Kojo\Service\Create + shared: false + calls: + - [setTypeRepository, ['@type.repository']] + - [setTime, ['@neighborhoods.pylon.time']] + service.create: + alias: neighborhoods.kojo.service.create \ No newline at end of file diff --git a/src/Service/Create/AwareTrait.php b/src/Service/Create/AwareTrait.php index 8b600f8e..9fdd5cf8 100644 --- a/src/Service/Create/AwareTrait.php +++ b/src/Service/Create/AwareTrait.php @@ -1,9 +1,9 @@ _create(FactoryInterface::class, $updateCrashFactory); + $this->_create(FactoryInterface::class, $serviceCreateFactory); return $this; } @@ -19,7 +20,12 @@ protected function _getServiceCreateFactory(): FactoryInterface return $this->_read(FactoryInterface::class); } - protected function _unsetServiceCreateFactory() + protected function _hasServiceCreateFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetServiceCreateFactory(): self { $this->_delete(FactoryInterface::class); diff --git a/src/Service/Create/FactoryInterface.php b/src/Service/Create/FactoryInterface.php index 89a63f38..e204ac1e 100644 --- a/src/Service/Create/FactoryInterface.php +++ b/src/Service/Create/FactoryInterface.php @@ -1,21 +1,25 @@ _getServiceUpdateCompleteSuccess(); + $updateCompleteSuccess = $this->_getServiceUpdateCompleteSuccessClone(); $stateService = $this->_getStateServiceClone(); $updateCompleteSuccess->setStateService($stateService); diff --git a/src/Service/Update/Complete/Success/Factory.yml b/src/Service/Update/Complete/Success/Factory.yml new file mode 100644 index 00000000..7a8c028d --- /dev/null +++ b/src/Service/Update/Complete/Success/Factory.yml @@ -0,0 +1,8 @@ +services: + neighborhoods.kojo.service.update.complete.success.factory: + class: Neighborhoods\Kojo\Service\Update\Complete\Success\Factory + calls: + - [setStateService, ['@state.service']] + - [setServiceUpdateCompleteSuccess, ['@service.update.complete.success']] + service.update.complete.success.factory: + alias: neighborhoods.kojo.service.update.complete.success.factory \ No newline at end of file diff --git a/src/Service/Update/Complete/Success/Factory/AwareTrait.php b/src/Service/Update/Complete/Success/Factory/AwareTrait.php index 2a46e10b..45ceeed5 100644 --- a/src/Service/Update/Complete/Success/Factory/AwareTrait.php +++ b/src/Service/Update/Complete/Success/Factory/AwareTrait.php @@ -1,9 +1,9 @@ _create(self::PROP_DATE_TIME, $dateTime); + + return $this; } protected function _getDateTime(): \DateTime diff --git a/src/Service/Update/Retry.yml b/src/Service/Update/Retry.yml new file mode 100644 index 00000000..1716ca1d --- /dev/null +++ b/src/Service/Update/Retry.yml @@ -0,0 +1,6 @@ +services: + neighborhoods.kojo.service.update.retry: + class: Neighborhoods\Kojo\Service\Update\Retry + shared: false + service.update.retry: + alias: neighborhoods.kojo.service.update.retry \ No newline at end of file diff --git a/src/Service/Update/Retry/AwareTrait.php b/src/Service/Update/Retry/AwareTrait.php index f9c1525a..323289f2 100644 --- a/src/Service/Update/Retry/AwareTrait.php +++ b/src/Service/Update/Retry/AwareTrait.php @@ -1,9 +1,9 @@ _getJobType()->setScheduleLimitAllowance($scheduleLimitAllowance); + + return $this; + } + public function setIsEnabled(bool $isEnabled): CreateInterface { $this->_getJobType()->setIsEnabled($isEnabled); diff --git a/src/Type/Service/Create.yml b/src/Type/Service/Create.yml new file mode 100644 index 00000000..03ca43af --- /dev/null +++ b/src/Type/Service/Create.yml @@ -0,0 +1,7 @@ +services: + neighborhoods.kojo.type.service.create: + class: Neighborhoods\Kojo\Type\Service\Create + calls: + - [setJobType, ['@data.job.type']] + type.service.create: + alias: neighborhoods.kojo.type.service.create \ No newline at end of file diff --git a/src/Type/Service/Create/AwareTrait.php b/src/Type/Service/Create/AwareTrait.php new file mode 100644 index 00000000..db0ecdb3 --- /dev/null +++ b/src/Type/Service/Create/AwareTrait.php @@ -0,0 +1,33 @@ +_create(CreateInterface ::class, $create); + + return $this; + } + + protected function _getTypeServiceCreate(): CreateInterface + { + return $this->_read(CreateInterface ::class); + } + + protected function _getTypeServiceCreateClone(): CreateInterface + { + return clone $this->_getServiceCreate(); + } + + protected function _unsetTypeServiceCreate() + { + $this->_delete(CreateInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Type/Service/Create/Factory.php b/src/Type/Service/Create/Factory.php new file mode 100644 index 00000000..e1941f0f --- /dev/null +++ b/src/Type/Service/Create/Factory.php @@ -0,0 +1,20 @@ +_getTypeServiceCreateClone(); + + return $create; + } +} \ No newline at end of file diff --git a/src/Type/Service/Create/Factory/AwareTrait.php b/src/Type/Service/Create/Factory/AwareTrait.php new file mode 100644 index 00000000..abbe8f4d --- /dev/null +++ b/src/Type/Service/Create/Factory/AwareTrait.php @@ -0,0 +1,34 @@ +_create(FactoryInterface::class, $updateCrashFactory); + + return $this; + } + + protected function _getTypeServiceCreateFactory(): FactoryInterface + { + return $this->_read(FactoryInterface::class); + } + + protected function _hasTypeServiceCreateFactory(): bool + { + return $this->_exists(FactoryInterface::class); + } + + protected function _unsetTypeServiceCreateFactory(): self + { + $this->_delete(FactoryInterface::class); + + return $this; + } +} \ No newline at end of file diff --git a/src/Type/Service/Create/FactoryInterface.php b/src/Type/Service/Create/FactoryInterface.php new file mode 100644 index 00000000..9e6f2937 --- /dev/null +++ b/src/Type/Service/Create/FactoryInterface.php @@ -0,0 +1,12 @@ +_create(self::PROP_PDO, $pdo); - $this->_getDbConnectionContainer('job')->setPdo($pdo); + $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_JOB)->setPdo($pdo); + + return $this; + } + + protected function _setSchemaPdo(\PDO $pdo): BootstrapInterface + { + $this->_getDbConnectionContainerRepository()->get(ContainerInterface::ID_SCHEMA)->setPdo($pdo); return $this; } diff --git a/src/Worker/BootstrapAbstract.yml b/src/Worker/BootstrapAbstract.yml new file mode 100644 index 00000000..03ffd2ba --- /dev/null +++ b/src/Worker/BootstrapAbstract.yml @@ -0,0 +1,12 @@ +services: + neighborhoods.kojo.worker.bootstrap_abstract: + class: Neighborhoods\Kojo\Worker\BootstrapAbstract + abstract: true + public: false + shared: false + calls: + - [setForeman, ['@foreman']] + - [setDbConnectionContainerRepository, ['@db.connection.container.repository']] + worker.bootstrap_abstract: + alias: neighborhoods.kojo.worker.bootstrap_abstract + public: false \ No newline at end of file diff --git a/src/Worker/BootstrapInterface.php b/src/Worker/BootstrapInterface.php index 3d718b8c..a3e91887 100644 --- a/src/Worker/BootstrapInterface.php +++ b/src/Worker/BootstrapInterface.php @@ -1,15 +1,9 @@ _create(ServiceInterface::class, $workerJobService); - - return $this; - } - - protected function _getWorkerJobService(): ServiceInterface - { - return $this->_read(ServiceInterface::class); - } - - protected function _getWorkerJobServiceClone(): ServiceInterface - { - return clone $this->_getJob(); - } -} \ No newline at end of file diff --git a/src/Worker/Locator.php b/src/Worker/Locator.php index 5f9cc0b1..cbfdd6c4 100644 --- a/src/Worker/Locator.php +++ b/src/Worker/Locator.php @@ -1,21 +1,55 @@ getCallable()[0]; + } public function getCallable(): callable { - $class = $this->_getJob()->getWorkerUri(); - $object = new $class; + if (empty($this->_callable)) { + try{ + $class = $this->_getJob()->getWorkerUri(); + $method = $this->_getJob()->getWorkerMethod(); + $this->_create(self::PROP_CLASS_NAME, $class); + $this->_create(self::PROP_METHOD_NAME, $method); + $object = new $class; + $callable = [$object, $method]; + if (is_callable($callable)) { + $this->_callable = $callable; + }else { + throw new \RuntimeException("Class[$class] and method[$method] is not callable."); + } + }catch(\Throwable $throwable){ + throw new Exception($throwable->getMessage(), Exception::CODE_CANNOT_INSTANTIATE_WORKER, $throwable); + } + } + + return $this->_callable; + } - return [$object, $this->_getJob()->getWorkerMethod()]; + public function getMethodName(): string + { + return $this->_read(self::PROP_METHOD_NAME); + } + + public function getClassName(): string + { + return $this->_read(self::PROP_CLASS_NAME); } } \ No newline at end of file diff --git a/src/Worker/Locator.yml b/src/Worker/Locator.yml new file mode 100644 index 00000000..0f1159dc --- /dev/null +++ b/src/Worker/Locator.yml @@ -0,0 +1,6 @@ +services: + neighborhoods.kojo.worker.locator: + class: Neighborhoods\Kojo\Worker\Locator + shared: false + worker.locator: + alias: neighborhoods.kojo.worker.locator \ No newline at end of file diff --git a/src/Worker/Locator/AwareTrait.php b/src/Worker/Locator/AwareTrait.php index 57051e18..1511a2fe 100644 --- a/src/Worker/Locator/AwareTrait.php +++ b/src/Worker/Locator/AwareTrait.php @@ -1,9 +1,9 @@ _addPossibleMessage(self::CODE_CANNOT_INSTANTIATE_WORKER, 'Cannot instantiate worker.'); + + return parent::__construct($message, $code, $previous); + } +} \ No newline at end of file diff --git a/src/Worker/Locator/ExceptionInterface.php b/src/Worker/Locator/ExceptionInterface.php new file mode 100644 index 00000000..ab003d98 --- /dev/null +++ b/src/Worker/Locator/ExceptionInterface.php @@ -0,0 +1,11 @@ +getMessage(); - exit(1); -} -$serviceContainer = new \NHDS\Jobs\Service\Container(); -$ymlServiceFilePath = __DIR__ . '/../config/root.yml'; -$serviceContainer->addServicesYmlFilePath($ymlServiceFilePath); -if (isset($argv[2]) && is_string($argv[2]) && is_file($argv[2])) { - $serviceContainer->addServicesYmlFilePath($argv[2]); -} -$consoleApplication = $serviceContainer->getContainerBuilder()->get('nhds.jobs.symfony.component.console.application'); - -$consoleApplication->run(); \ No newline at end of file diff --git a/src/bin/server b/src/bin/server deleted file mode 100755 index bb41fd0f..00000000 --- a/src/bin/server +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -getMessage(); - exit(1); -} -$serviceContainer = new \NHDS\Jobs\Service\Container(); -$ymlServiceFilePath = __DIR__ . '/../config/root.yml'; -$serviceContainer->addServicesYmlFilePath($ymlServiceFilePath); -foreach ($argv as $argument) { - if (strstr($argument, 'ysfp:') !== false) { - $ymlServicesFilePath = explode('ysfp:', $argument); - $serviceContainer->addServicesYmlFilePath($ymlServicesFilePath[1]); - } -} -$server = $serviceContainer->getContainerBuilder()->get('process.pool.server'); -$server->setParentProcessPath(''); -$server->start(); \ No newline at end of file diff --git a/src/config/Console/Command/Db/Setup/Install.yml b/src/config/Console/Command/Db/Setup/Install.yml deleted file mode 100644 index 53b050a4..00000000 --- a/src/config/Console/Command/Db/Setup/Install.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.console.command.db.setup.install: - class: NHDS\Jobs\Console\Command\Db\Setup\Install - calls: - - [setBootstrap, ['@worker.bootstrap']] - - [setDbSetup, ['@db.setup']] - console.command.db.setup.install: - alias: nhds.jobs.console.command.db.setup.install \ No newline at end of file diff --git a/src/config/Console/Command/Db/TearDown/Uninstall.yml b/src/config/Console/Command/Db/TearDown/Uninstall.yml deleted file mode 100644 index 4dc13a4b..00000000 --- a/src/config/Console/Command/Db/TearDown/Uninstall.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.console.command.db.tear_down.uninstall: - class: NHDS\Jobs\Console\Command\Db\TearDown\Uninstall - calls: - - [setBootstrap, ['@worker.bootstrap']] - - [setDbTearDown, ['@db.tear_down']] - console.command.db.tear_down.uninstall: - alias: nhds.jobs.console.command.db.tear_down.uninstall \ No newline at end of file diff --git a/src/config/Console/Command/Process/Pool/Server/Start.yml b/src/config/Console/Command/Process/Pool/Server/Start.yml deleted file mode 100644 index c8117aa7..00000000 --- a/src/config/Console/Command/Process/Pool/Server/Start.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - nhds.jobs.console.command.process.pool.server.start: - class: NHDS\Jobs\Console\Command\Process\Pool\Server\Start - console.command.process.pool.server.start: - alias: nhds.jobs.console.command.process.pool.server.start \ No newline at end of file diff --git a/src/config/Data/Job.yml b/src/config/Data/Job.yml deleted file mode 100644 index c2296eaf..00000000 --- a/src/config/Data/Job.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.data.job: - class: NHDS\Jobs\Data\Job - shared: false - calls: - - [addDbConnectionContainer, ['@db.connection.container-job']] - data.job: - alias: nhds.jobs.data.job \ No newline at end of file diff --git a/src/config/Data/Job/Collection/CrashDetection.yml b/src/config/Data/Job/Collection/CrashDetection.yml deleted file mode 100644 index 9bb936d1..00000000 --- a/src/config/Data/Job/Collection/CrashDetection.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - nhds.jobs.data.job.collection.crashdetection: - class: NHDS\Jobs\Data\Job\Collection\CrashDetection - shared: false - calls: - - [setModel, ['@data.job']] - - [setIterator, ['@data.job.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.crashdetection: - alias: nhds.jobs.data.job.collection.crashdetection \ No newline at end of file diff --git a/src/config/Data/Job/Collection/Delete.yml b/src/config/Data/Job/Collection/Delete.yml deleted file mode 100644 index a7af668d..00000000 --- a/src/config/Data/Job/Collection/Delete.yml +++ /dev/null @@ -1,10 +0,0 @@ -services: - nhds.jobs.data.job.collection.delete: - class: NHDS\Jobs\Data\Job\Collection\Delete - calls: - - [setModel, ['@data.job']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setIterator, ['@data.job.collection.iterator']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.delete: - alias: nhds.jobs.data.job.collection.delete \ No newline at end of file diff --git a/src/config/Data/Job/Collection/Iterator.yml b/src/config/Data/Job/Collection/Iterator.yml deleted file mode 100644 index a22ca939..00000000 --- a/src/config/Data/Job/Collection/Iterator.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.data.job.collection.iterator: - class: NHDS\Jobs\Data\Job\Collection\Iterator - shared: false - data.job.collection.iterator: - alias: nhds.jobs.data.job.collection.iterator \ No newline at end of file diff --git a/src/config/Data/Job/Collection/Schedule/LimitCheck.yml b/src/config/Data/Job/Collection/Schedule/LimitCheck.yml deleted file mode 100644 index f2963c18..00000000 --- a/src/config/Data/Job/Collection/Schedule/LimitCheck.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - nhds.jobs.data.job.collection.schedule.limitcheck: - class: NHDS\Jobs\Data\Job\Collection\Schedule\LimitCheck - shared: false - calls: - - [setModel, ['@data.job']] - - [setIterator, ['@data.job.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.schedule.limitcheck: - alias: nhds.jobs.data.job.collection.schedule.limitcheck \ No newline at end of file diff --git a/src/config/Data/Job/Collection/ScheduleLimit.yml b/src/config/Data/Job/Collection/ScheduleLimit.yml deleted file mode 100644 index b0f3957f..00000000 --- a/src/config/Data/Job/Collection/ScheduleLimit.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - nhds.jobs.data.job.collection.schedulelimit: - class: NHDS\Jobs\Data\Job\Collection\ScheduleLimit - shared: false - calls: - - [setModel, ['@data.job']] - - [setIterator, ['@data.job.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.schedulelimit: - alias: nhds.jobs.data.job.collection.schedulelimit \ No newline at end of file diff --git a/src/config/Data/Job/Collection/Scheduler.yml b/src/config/Data/Job/Collection/Scheduler.yml deleted file mode 100644 index fb1b5a82..00000000 --- a/src/config/Data/Job/Collection/Scheduler.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - nhds.jobs.data.job.collection.scheduler: - class: NHDS\Jobs\Data\Job\Collection\Scheduler - shared: false - calls: - - [setModel, ['@data.job']] - - [setIterator, ['@data.job.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.scheduler: - alias: nhds.jobs.data.job.collection.scheduler \ No newline at end of file diff --git a/src/config/Data/Job/Collection/Selector.yml b/src/config/Data/Job/Collection/Selector.yml deleted file mode 100644 index 3ceff355..00000000 --- a/src/config/Data/Job/Collection/Selector.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - nhds.jobs.data.job.collection.selector: - class: NHDS\Jobs\Data\Job\Collection\Selector - shared: false - calls: - - [setModel, ['@data.job']] - - [setIterator, ['@data.job.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - - [setLogger, ['@process.pool.logger']] - data.job.collection.selector: - alias: nhds.jobs.data.job.collection.selector \ No newline at end of file diff --git a/src/config/Data/Job/Type.yml b/src/config/Data/Job/Type.yml deleted file mode 100644 index 5679c6d1..00000000 --- a/src/config/Data/Job/Type.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.data.job.type: - class: NHDS\Jobs\Data\Job\Type - shared: false - calls: - - [addDbConnectionContainer, ['@db.connection.container-job']] - data.job.type: - alias: nhds.jobs.data.job.type \ No newline at end of file diff --git a/src/config/Data/Job/Type/Collection/Iterator.yml b/src/config/Data/Job/Type/Collection/Iterator.yml deleted file mode 100644 index cfec054a..00000000 --- a/src/config/Data/Job/Type/Collection/Iterator.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.data.job.type.collection.iterator: - class: NHDS\Jobs\Data\Job\Type\Collection\Iterator - shared: false - data.job.type.collection.iterator: - alias: nhds.jobs.data.job.type.collection.iterator \ No newline at end of file diff --git a/src/config/Data/Job/Type/Collection/Scheduler.yml b/src/config/Data/Job/Type/Collection/Scheduler.yml deleted file mode 100644 index 65214368..00000000 --- a/src/config/Data/Job/Type/Collection/Scheduler.yml +++ /dev/null @@ -1,10 +0,0 @@ -services: - nhds.jobs.data.job.type.collection.scheduler: - class: NHDS\Jobs\Data\Job\Type\Collection\Scheduler - shared: false - calls: - - [setModel, ['@data.job.type']] - - [setIterator, ['@data.job.type.collection.iterator']] - - [addDbConnectionContainer, ['@db.connection.container-job']] - data.job.type.collection.scheduler: - alias: nhds.jobs.data.job.type.collection.scheduler \ No newline at end of file diff --git a/src/config/Db/Connection/Container.yml b/src/config/Db/Connection/Container.yml deleted file mode 100644 index 625c0924..00000000 --- a/src/config/Db/Connection/Container.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - nhds.jobs.db.connection.container-job: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_JOB')"]] - db.connection.container-job: - alias: nhds.jobs.db.connection.container-job - nhds.jobs.db.connection.container-schema: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_SCHEMA')"]] - db.connection.container-schema: - alias: nhds.jobs.db.connection.container-schema \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_0_0_0.yml b/src/config/Db/Setup/Schema/Version_0_0_0.yml deleted file mode 100644 index 38c37667..00000000 --- a/src/config/Db/Setup/Schema/Version_0_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.0_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_0_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.setup.schema.version.0_0_0: - alias: nhds.jobs.db.setup.schema.version.0_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_1_0_0.yml b/src/config/Db/Setup/Schema/Version_1_0_0.yml deleted file mode 100644 index 1d834895..00000000 --- a/src/config/Db/Setup/Schema/Version_1_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.1_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_1_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.setup.schema.version.1_0_0: - alias: nhds.jobs.db.setup.schema.version.1_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_2_0_0.yml b/src/config/Db/Setup/Schema/Version_2_0_0.yml deleted file mode 100644 index 5b3f6c22..00000000 --- a/src/config/Db/Setup/Schema/Version_2_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.2_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_2_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.setup.schema.version.2_0_0: - alias: nhds.jobs.db.setup.schema.version.2_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_3_0_0.yml b/src/config/Db/Setup/Schema/Version_3_0_0.yml deleted file mode 100644 index a75bba3a..00000000 --- a/src/config/Db/Setup/Schema/Version_3_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.3_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_3_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.setup.schema.version.3_0_0: - alias: nhds.jobs.db.setup.schema.version.3_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_4_0_0.yml b/src/config/Db/Setup/Schema/Version_4_0_0.yml deleted file mode 100644 index 262d18e0..00000000 --- a/src/config/Db/Setup/Schema/Version_4_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.4_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_4_0_0 - calls: - - [addDbConnectionContainer, ["@nhds.jobs.db.connection.container-schema"]] - db.setup.schema.version.4_0_0: - alias: nhds.jobs.db.setup.schema.version.4_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_5_0_0.yml b/src/config/Db/Setup/Schema/Version_5_0_0.yml deleted file mode 100644 index 73245c8f..00000000 --- a/src/config/Db/Setup/Schema/Version_5_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version.5_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_5_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.setup.schema.version.5_0_0: - alias: nhds.jobs.db.setup.schema.version.5_0_0 \ No newline at end of file diff --git a/src/config/Db/Setup/Schema/Version_6_0_0.yml b/src/config/Db/Setup/Schema/Version_6_0_0.yml deleted file mode 100644 index 30f3b351..00000000 --- a/src/config/Db/Setup/Schema/Version_6_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.setup.schema.version_6_0_0: - class: NHDS\Jobs\Db\Setup\Schema\Version_6_0_0 - calls: - - [addDbConnectionContainer, ['@db.connection.container-schema']] - db.setup.schema.version_6_0_0: - alias: nhds.jobs.db.setup.schema.version_6_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_0_0_0.yml b/src/config/Db/TearDown/Schema/Version_0_0_0.yml deleted file mode 100644 index ff11b534..00000000 --- a/src/config/Db/TearDown/Schema/Version_0_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.0_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_0_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.0_0_0: - alias: nhds.jobs.db.tear_down.schema.version.0_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_1_0_0.yml b/src/config/Db/TearDown/Schema/Version_1_0_0.yml deleted file mode 100644 index da89aac1..00000000 --- a/src/config/Db/TearDown/Schema/Version_1_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.1_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_1_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.1_0_0: - alias: nhds.jobs.db.tear_down.schema.version.1_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_2_0_0.yml b/src/config/Db/TearDown/Schema/Version_2_0_0.yml deleted file mode 100644 index 3a0ba4b5..00000000 --- a/src/config/Db/TearDown/Schema/Version_2_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.2_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_2_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.2_0_0: - alias: nhds.jobs.db.tear_down.schema.version.2_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_3_0_0.yml b/src/config/Db/TearDown/Schema/Version_3_0_0.yml deleted file mode 100644 index 54db804d..00000000 --- a/src/config/Db/TearDown/Schema/Version_3_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.3_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_3_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.3_0_0: - alias: nhds.jobs.db.tear_down.schema.version.3_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_4_0_0.yml b/src/config/Db/TearDown/Schema/Version_4_0_0.yml deleted file mode 100644 index 2dd213e3..00000000 --- a/src/config/Db/TearDown/Schema/Version_4_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.4_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_4_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.4_0_0: - alias: nhds.jobs.db.tear_down.schema.version.4_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_5_0_0.yml b/src/config/Db/TearDown/Schema/Version_5_0_0.yml deleted file mode 100644 index 1b43e71f..00000000 --- a/src/config/Db/TearDown/Schema/Version_5_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version.5_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_5_0_0 - calls: - - [addDbConnectionContainer, ["@db.connection.container-schema"]] - db.tear_down.schema.version.5_0_0: - alias: nhds.jobs.db.tear_down.schema.version.5_0_0 \ No newline at end of file diff --git a/src/config/Db/TearDown/Schema/Version_6_0_0.yml b/src/config/Db/TearDown/Schema/Version_6_0_0.yml deleted file mode 100644 index c61b7afc..00000000 --- a/src/config/Db/TearDown/Schema/Version_6_0_0.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.db.tear_down.schema.version_6_0_0: - class: NHDS\Jobs\Db\TearDown\Schema\Version_6_0_0 - calls: - - [addDbConnectionContainer, ['@db.connection.container-schema']] - db.tear_down.schema.version_6_0_0: - alias: nhds.jobs.db.tear_down.schema.version_6_0_0 \ No newline at end of file diff --git a/src/config/Message/Broker/Redis.yml b/src/config/Message/Broker/Redis.yml deleted file mode 100644 index 04dfd983..00000000 --- a/src/config/Message/Broker/Redis.yml +++ /dev/null @@ -1,12 +0,0 @@ -services: - nhds.jobs.message.broker.redis: - class: NHDS\Jobs\Message\Broker\Redis - shared: false - calls: - - [setLogger, ['@process.pool.logger']] - - [setPort, ['6379']] - - [setHost, ['redis']] - - [setSubscriptionChannelName, ['job_listener_subscribe']] - - [setPublishChannelName, ['job_listener_publish']] - message.broker.redis: - alias: nhds.jobs.message.broker.redis \ No newline at end of file diff --git a/src/config/Message/Broker/Type/Collection.yml b/src/config/Message/Broker/Type/Collection.yml deleted file mode 100644 index aeb8237a..00000000 --- a/src/config/Message/Broker/Type/Collection.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.message.broker.type.collection-job: - class: NHDS\Jobs\Message\Broker\Type\Collection - calls: - - [addBrokerType, ['job_broker', '@message.broker.redis']] - message.broker.type.collection-job: - alias: nhds.jobs.message.broker.type.collection-job \ No newline at end of file diff --git a/src/config/Process/Collection.yml b/src/config/Process/Collection.yml deleted file mode 100644 index 65d632f8..00000000 --- a/src/config/Process/Collection.yml +++ /dev/null @@ -1,19 +0,0 @@ -services: - nhds.jobs.process.collection: - shared: true - class: NHDS\Jobs\Process\Collection - calls: - - [setIterator, ['@process.collection.iterator']] - - [addProcessPrototype, ['@process.listener.command']] - - [addProcessPrototype, ['@process.job.required']] - - [addProcessPrototype, ['@process.job']] - process.collection: - alias: nhds.jobs.process.collection - nhds.jobs.process.collection-server: - shared: true - class: NHDS\Jobs\Process\Collection - calls: - - [setIterator, ['@process.collection.iterator']] - - [addProcessPrototype, ['@process.root']] - process.collection-server: - alias: nhds.jobs.process.collection-server \ No newline at end of file diff --git a/src/config/Process/Collection/Iterator.yml b/src/config/Process/Collection/Iterator.yml deleted file mode 100644 index 5e9ab54a..00000000 --- a/src/config/Process/Collection/Iterator.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.process.collection.iterator: - shared: false - class: NHDS\Jobs\Process\Collection\Iterator - process.collection.iterator: - alias: nhds.jobs.process.collection.iterator \ No newline at end of file diff --git a/src/config/Process/Job.yml b/src/config/Process/Job.yml deleted file mode 100644 index e9af21f0..00000000 --- a/src/config/Process/Job.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - nhds.jobs.process.job: - shared: false - class: NHDS\Jobs\Process\Job - calls: - - [setLogger, ['@process.pool.logger']] - - [setForeman, ['@foreman']] - - [setMaintainer, ['@maintainer']] - - [setScheduler, ['@scheduler']] - - [setBootstrap, ['@worker.bootstrap']] - - [setTypeCode, ['job']] - - [setSelector, ['@selector']] - - [setProcessStrategy, ['@process.strategy.process_control']] - process.job: - alias: nhds.jobs.process.job \ No newline at end of file diff --git a/src/config/Process/Job/Required.yml b/src/config/Process/Job/Required.yml deleted file mode 100644 index 56ba165f..00000000 --- a/src/config/Process/Job/Required.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - nhds.jobs.process.job.required: - shared: false - class: NHDS\Jobs\Process\Job\Required - calls: - - [setLogger, ['@process.pool.logger']] - - [setForeman, ['@foreman']] - - [setMaintainer, ['@maintainer']] - - [setScheduler, ['@scheduler']] - - [setBootstrap, ['@worker.bootstrap']] - - [setTypeCode, ['job.required']] - - [setProcessStrategy, ['@process.strategy.process_control']] - - [setSelector, ['@selector']] - process.job.required: - alias: nhds.jobs.process.job.required \ No newline at end of file diff --git a/src/config/Process/Listener/Command.yml b/src/config/Process/Listener/Command.yml deleted file mode 100644 index 748f4f88..00000000 --- a/src/config/Process/Listener/Command.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - nhds.jobs.process.listener.command: - class: NHDS\Jobs\Process\Listener\Command - calls: - - [setTypeCode, ['listener.command']] - - [setBrokerTypeCollection, ['@nhds.jobs.message.broker.type.collection-job']] - - [setLogger, ['@process.pool.logger']] - - [setBrokerTypeCode, ['job_broker']] - - [setExpressionLanguage, ['@symfony.component.expressionlanguage.expressionlanguage']] - - [setProcessCollection, ['@process.collection']] - - [setProcessStrategy, ['@process.strategy.process_control']] - process.listener.command: - alias: nhds.jobs.process.listener.command \ No newline at end of file diff --git a/src/config/Process/Pool.yml b/src/config/Process/Pool.yml deleted file mode 100644 index 5e3c2960..00000000 --- a/src/config/Process/Pool.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.process.pool: - class: NHDS\Jobs\Process\Pool - shared: false - calls: - - [setLogger, ['@process.pool.logger']] - process.pool: - alias: nhds.jobs.process.pool \ No newline at end of file diff --git a/src/config/Process/Pool/Factory.yml b/src/config/Process/Pool/Factory.yml deleted file mode 100644 index 65ba833e..00000000 --- a/src/config/Process/Pool/Factory.yml +++ /dev/null @@ -1,32 +0,0 @@ -parameters: - process_pool_strategy.max_child_processes: 10 - process_pool_strategy.child_process_wait_throttle: 1 - process_pool_strategy.max_alarm_time: 30 - process_pool_strategy-server.max_child_processes: 1 - process_pool_strategy-server.child_process_wait_throttle: 1 - process_pool_strategy-server.max_alarm_time: 3600 -services: - nhds.jobs.process.pool.factory: - class: NHDS\Jobs\Process\Pool\Factory - shared: false - calls: - - [setMaxChildProcesses, ['%process_pool_strategy.max_child_processes%']] - - [setChildProcessWaitThrottle, ['%process_pool_strategy.child_process_wait_throttle%']] - - [setMaxAlarmTime, ['%process_pool_strategy.max_alarm_time%']] - - [setProcessPool, ['@process.pool']] - - [setProcessPoolStrategy, ['@process.pool.strategy']] - - [setProcessCollection, ['@process.collection']] - process.pool.factory: - alias: nhds.jobs.process.pool.factory - nhds.jobs.process.pool.factory-server: - class: NHDS\Jobs\Process\Pool\Factory - shared: false - calls: - - [setMaxChildProcesses, ['%process_pool_strategy-server.max_child_processes%']] - - [setChildProcessWaitThrottle, ['%process_pool_strategy-server.child_process_wait_throttle%']] - - [setMaxAlarmTime, ['%process_pool_strategy-server.max_alarm_time%']] - - [setProcessPool, ['@process.pool']] - - [setProcessPoolStrategy, ['@process.pool.strategy-server']] - - [setProcessCollection, ['@process.collection-server']] - process.pool.factory-server: - alias: nhds.jobs.process.pool.factory-server \ No newline at end of file diff --git a/src/config/Process/Pool/Server.yml b/src/config/Process/Pool/Server.yml deleted file mode 100644 index 6c7abf86..00000000 --- a/src/config/Process/Pool/Server.yml +++ /dev/null @@ -1,13 +0,0 @@ -services: - nhds.jobs.process.pool.server: - public: true - class: NHDS\Jobs\Process\Pool\Server - calls: - - [setLogger, ['@process.pool.logger']] - - [setSemaphore, ['@semaphore']] - - [addSemaphoreResourceFactory, ['@semaphore.resource.factory-server']] - - [setProcessPoolFactory, ['@process.pool.factory-server']] - - [setTypeCode, ['server']] - process.pool.server: - public: true - alias: nhds.jobs.process.pool.server \ No newline at end of file diff --git a/src/config/Process/Pool/Strategy.yml b/src/config/Process/Pool/Strategy.yml deleted file mode 100644 index f60d1fa0..00000000 --- a/src/config/Process/Pool/Strategy.yml +++ /dev/null @@ -1,18 +0,0 @@ -services: - nhds.jobs.process.pool.strategy: - shared: false - class: NHDS\Jobs\Process\Pool\Strategy - calls: - - [setAlarmProcessTypeCode, ['job']] - - [setLogger, ['@process.pool.logger']] - process.pool.strategy: - alias: nhds.jobs.process.pool.strategy - nhds.jobs.process.pool.strategy-server: - shared: false - class: NHDS\Jobs\Process\Pool\Strategy - calls: - - [setAlarmProcessTypeCode, ['root']] - - [setFillProcessTypeCode, ['root']] - - [setLogger, ['@process.pool.logger']] - process.pool.strategy-server: - alias: nhds.jobs.process.pool.strategy-server \ No newline at end of file diff --git a/src/config/Process/Root.yml b/src/config/Process/Root.yml deleted file mode 100644 index f4ac8325..00000000 --- a/src/config/Process/Root.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - nhds.jobs.process.root: - class: NHDS\Jobs\Process\Root - calls: - - [setProcessPoolFactory, ['@process.pool.factory']] - - [setLogger, ['@process.pool.logger']] - - [setProcessStrategy, ['@process.strategy.process_control']] - process.root: - alias: nhds.jobs.process.root \ No newline at end of file diff --git a/src/config/Process/Strategy/ProcessControl.yml b/src/config/Process/Strategy/ProcessControl.yml deleted file mode 100644 index e2fc15f7..00000000 --- a/src/config/Process/Strategy/ProcessControl.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - nhds.jobs.process.strategy.process_control: - class: NHDS\Jobs\Process\Strategy\ProcessControl - process.strategy.process_control: - alias: nhds.jobs.process.strategy.process_control \ No newline at end of file diff --git a/src/config/Scheduler/Cache.yml b/src/config/Scheduler/Cache.yml deleted file mode 100644 index 493dbc1c..00000000 --- a/src/config/Scheduler/Cache.yml +++ /dev/null @@ -1,10 +0,0 @@ -services: - nhds.jobs.scheduler.cache: - class: NHDS\Jobs\Scheduler\Cache - shared: true - calls: - - [setSchedulerTime, ['@scheduler.time']] - - [setCacheItemPool, ['@symfony.component.cache.adpater.redisadapter']] - - [setTime, ['@nhds.toolkit.time']] - scheduler.cache: - alias: nhds.jobs.scheduler.cache \ No newline at end of file diff --git a/src/config/Scheduler/Time.yml b/src/config/Scheduler/Time.yml deleted file mode 100644 index d8290c4c..00000000 --- a/src/config/Scheduler/Time.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - nhds.jobs.scheduler.time: - class: NHDS\Jobs\Scheduler\Time - shared: true - calls: - - [setMinutesToScheduleAheadFor, [5]] - - [setTime, ['@nhds.toolkit.time']] - scheduler.time: - alias: nhds.jobs.scheduler.time \ No newline at end of file diff --git a/src/config/Semaphore.yml b/src/config/Semaphore.yml deleted file mode 100644 index 55fb1967..00000000 --- a/src/config/Semaphore.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - nhds.jobs.semaphore: - class: NHDS\Jobs\Semaphore - semaphore: - alias: nhds.jobs.semaphore \ No newline at end of file diff --git a/src/config/Semaphore/Resource.yml b/src/config/Semaphore/Resource.yml deleted file mode 100644 index 1034c5c7..00000000 --- a/src/config/Semaphore/Resource.yml +++ /dev/null @@ -1,53 +0,0 @@ -services: - nhds.jobs.semaphore.resource-job: - class: NHDS\Jobs\Semaphore\Resource - shared: false - calls: - - [setIsBlocking, [false]] - semaphore.resource-job: - alias: nhds.jobs.semaphore.resource-job - nhds.jobs.semaphore.resource-maintainer_delete: - class: NHDS\Jobs\Semaphore\Resource - shared: false - calls: - - [setResourceName, ['maintainer_delete.lock']] - - [setResourcePath, ['nhds/jobs']] - - [setIsBlocking, [false]] - semaphore.resource-maintainer_delete: - alias: nhds.jobs.semaphore.resource-maintainer_delete - nhds.jobs.semaphore.resource-update_pending_jobs: - class: NHDS\Jobs\Semaphore\Resource - shared: false - calls: - - [setResourceName, ['update_pending_jobs.lock']] - - [setResourcePath, ['nhds/jobs']] - - [setIsBlocking, [false]] - semaphore.resource-update_pending_jobs: - alias: nhds.jobs.semaphore.resource-update_pending_jobs - nhds.jobs.semaphore.resource-reschedule_jobs: - class: NHDS\Jobs\Semaphore\Resource - shared: false - calls: - - [setResourceName, ['reschedule_jobs.lock']] - - [setResourcePath, ['nhds/jobs']] - - [setIsBlocking, [false]] - semaphore.resource-reschedule_jobs: - alias: nhds.jobs.semaphore.resource-reschedule_jobs - nhds.jobs.semaphore.resource-schedule: - class: NHDS\Jobs\Semaphore\Resource - calls: - - [setResourceName, ['schedule.lock']] - - [setResourcePath, ['nhds/jobs']] - - [setIsBlocking, [false]] - shared: false - semaphore.resource-schedule: - alias: nhds.jobs.semaphore.resource-schedule - nhds.jobs.semaphore.resource-server: - class: NHDS\Jobs\Semaphore\Resource - shared: false - calls: - - [setResourceName, ['server.lock']] - - [setResourcePath, ['nhds/jobs']] - - [setIsBlocking, [false]] - semaphore.resource-server: - alias: nhds.jobs.semaphore.resource-server \ No newline at end of file diff --git a/src/config/Semaphore/Resource/Factory.yml b/src/config/Semaphore/Resource/Factory.yml deleted file mode 100644 index 31cd146b..00000000 --- a/src/config/Semaphore/Resource/Factory.yml +++ /dev/null @@ -1,56 +0,0 @@ -services: - nhds.jobs.semaphore.resource.factory-job: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['job']] - - [setSemaphoreResource, ['@semaphore.resource-job']] - - [setSemaphoreResourceOwner, ['@semaphore.resource.owner.job']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-job: - alias: nhds.jobs.semaphore.resource.factory-job - nhds.jobs.semaphore.resource.factory-maintainer_delete: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['maintainer_delete']] - - [setSemaphoreResource, ['@semaphore.resource-maintainer_delete']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-maintainer_delete: - alias: nhds.jobs.semaphore.resource.factory-maintainer_delete - nhds.jobs.semaphore.resource.factory-update_pending_jobs: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['update_pending_jobs']] - - [setSemaphoreResource, ['@semaphore.resource-update_pending_jobs']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-update_pending_jobs: - alias: nhds.jobs.semaphore.resource.factory-update_pending_jobs - nhds.jobs.semaphore.resource.factory-reschedule_jobs: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['reschedule_jobs']] - - [setSemaphoreResource, ['@semaphore.resource-reschedule_jobs']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-reschedule_jobs: - alias: nhds.jobs.semaphore.resource.factory-reschedule_jobs - nhds.jobs.semaphore.resource.factory-schedule: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['schedule']] - - [setSemaphoreResource, ['@semaphore.resource-schedule']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-schedule: - alias: nhds.jobs.semaphore.resource.factory-schedule - nhds.jobs.semaphore.resource.factory-server: - class: NHDS\Jobs\Semaphore\Resource\Factory - calls: - - [setName, ['server']] - - [setSemaphoreResource, ['@semaphore.resource-server']] - - [setMutex, ['@semaphore.mutex.flock']] - - [setSemaphore, ['@semaphore']] - semaphore.resource.factory-server: - alias: nhds.jobs.semaphore.resource.factory-server \ No newline at end of file diff --git a/src/config/Semaphore/Resource/Owner/Job.yml b/src/config/Semaphore/Resource/Owner/Job.yml deleted file mode 100644 index 5163583a..00000000 --- a/src/config/Semaphore/Resource/Owner/Job.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - nhds.jobs.semaphore.resource.owner.job: - class: NHDS\Jobs\Semaphore\Resource\Owner\Job - semaphore.resource.owner.job: - alias: nhds.jobs.semaphore.resource.owner.job \ No newline at end of file diff --git a/src/config/Service/Create.yml b/src/config/Service/Create.yml deleted file mode 100644 index 7d2d1b96..00000000 --- a/src/config/Service/Create.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - nhds.jobs.service.create: - class: NHDS\Jobs\Service\Create - shared: false - calls: - - [setTypeRepository, ['@type.repository']] - - [setTime, ['@nhds.toolkit.time']] - service.create: - alias: nhds.jobs.service.create \ No newline at end of file diff --git a/src/config/Service/Update/Complete/Failed.yml b/src/config/Service/Update/Complete/Failed.yml deleted file mode 100644 index 4d28d92f..00000000 --- a/src/config/Service/Update/Complete/Failed.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.complete.failed: - class: NHDS\Jobs\Service\Update\Complete\Failed - shared: false - service.update.complete.failed: - alias: nhds.jobs.service.update.complete.failed \ No newline at end of file diff --git a/src/config/Service/Update/Complete/Failed/Factory.yml b/src/config/Service/Update/Complete/Failed/Factory.yml deleted file mode 100644 index bdf130d0..00000000 --- a/src/config/Service/Update/Complete/Failed/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.complete.failed.factory: - class: NHDS\Jobs\Service\Update\Complete\Failed\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateCompleteFailed, ['@service.update.complete.failed']] - service.update.complete.failed.factory: - alias: nhds.jobs.service.update.complete.failed.factory \ No newline at end of file diff --git a/src/config/Service/Update/Complete/FailedScheduleLimitCheck.yml b/src/config/Service/Update/Complete/FailedScheduleLimitCheck.yml deleted file mode 100644 index 571fde3a..00000000 --- a/src/config/Service/Update/Complete/FailedScheduleLimitCheck.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.complete.failedschedulelimitcheck: - class: NHDS\Jobs\Service\Update\Complete\FailedScheduleLimitCheck - shared: false - service.update.complete.failedschedulelimitcheck: - alias: nhds.jobs.service.update.complete.failedschedulelimitcheck \ No newline at end of file diff --git a/src/config/Service/Update/Complete/FailedScheduleLimitCheck/Factory.yml b/src/config/Service/Update/Complete/FailedScheduleLimitCheck/Factory.yml deleted file mode 100644 index 6ab4313d..00000000 --- a/src/config/Service/Update/Complete/FailedScheduleLimitCheck/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.complete.failedschedulelimitcheck.factory: - class: NHDS\Jobs\Service\Update\Complete\FailedScheduleLimitCheck\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateCompleteFailedScheduleLimitCheck, ['@service.update.complete.failedschedulelimitcheck']] - service.update.complete.failedschedulelimitcheck.factory: - alias: nhds.jobs.service.update.complete.failedschedulelimitcheck.factory \ No newline at end of file diff --git a/src/config/Service/Update/Complete/Success.yml b/src/config/Service/Update/Complete/Success.yml deleted file mode 100644 index c5d460a2..00000000 --- a/src/config/Service/Update/Complete/Success.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.complete.success: - class: NHDS\Jobs\Service\Update\Complete\Success - shared: false - service.update.complete.success: - alias: nhds.jobs.service.update.complete.success \ No newline at end of file diff --git a/src/config/Service/Update/Complete/Success/Factory.yml b/src/config/Service/Update/Complete/Success/Factory.yml deleted file mode 100644 index e5a1c974..00000000 --- a/src/config/Service/Update/Complete/Success/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.complete.success.factory: - class: NHDS\Jobs\Service\Update\Complete\Success\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateCompleteSuccess, ['@service.update.complete.success']] - service.update.complete.success.factory: - alias: nhds.jobs.service.update.complete.success.factory \ No newline at end of file diff --git a/src/config/Service/Update/Crash.yml b/src/config/Service/Update/Crash.yml deleted file mode 100644 index 29a1b832..00000000 --- a/src/config/Service/Update/Crash.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.crash: - class: NHDS\Jobs\Service\Update\Crash - shared: false - service.update.crash: - alias: nhds.jobs.service.update.crash \ No newline at end of file diff --git a/src/config/Service/Update/Crash/Factory.yml b/src/config/Service/Update/Crash/Factory.yml deleted file mode 100644 index 7810f1f0..00000000 --- a/src/config/Service/Update/Crash/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.crash.factory: - class: NHDS\Jobs\Service\Update\Crash\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateCrash, ['@service.update.crash']] - service.update.crash.factory: - alias: nhds.jobs.service.update.crash.factory \ No newline at end of file diff --git a/src/config/Service/Update/Hold.yml b/src/config/Service/Update/Hold.yml deleted file mode 100644 index 907c0e3c..00000000 --- a/src/config/Service/Update/Hold.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.hold: - class: NHDS\Jobs\Service\Update\Hold - shared: false - service.update.hold: - alias: nhds.jobs.service.update.hold \ No newline at end of file diff --git a/src/config/Service/Update/Hold/Factory.yml b/src/config/Service/Update/Hold/Factory.yml deleted file mode 100644 index f49749cd..00000000 --- a/src/config/Service/Update/Hold/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.hold.factory: - class: NHDS\Jobs\Service\Update\Hold\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateHold, ['@service.update.hold']] - service.update.hold.factory: - alias: nhds.jobs.service.update.hold.factory \ No newline at end of file diff --git a/src/config/Service/Update/Panic.yml b/src/config/Service/Update/Panic.yml deleted file mode 100644 index 38cc6090..00000000 --- a/src/config/Service/Update/Panic.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.panic: - class: NHDS\Jobs\Service\Update\Panic - shared: false - service.update.panic: - alias: nhds.jobs.service.update.panic \ No newline at end of file diff --git a/src/config/Service/Update/Panic/Factory.yml b/src/config/Service/Update/Panic/Factory.yml deleted file mode 100644 index b92fd36c..00000000 --- a/src/config/Service/Update/Panic/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.panic.factory: - class: NHDS\Jobs\Service\Update\Panic\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdatePanic, ['@service.update.panic']] - service.update.panic.factory: - alias: nhds.jobs.service.update.panic.factory \ No newline at end of file diff --git a/src/config/Service/Update/Retry.yml b/src/config/Service/Update/Retry.yml deleted file mode 100644 index 01da0299..00000000 --- a/src/config/Service/Update/Retry.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.retry: - class: NHDS\Jobs\Service\Update\Retry - shared: false - service.update.retry: - alias: nhds.jobs.service.update.retry \ No newline at end of file diff --git a/src/config/Service/Update/Retry/Factory.yml b/src/config/Service/Update/Retry/Factory.yml deleted file mode 100644 index b6811854..00000000 --- a/src/config/Service/Update/Retry/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.retry.factory: - class: NHDS\Jobs\Service\Update\Retry\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateRetry, ['@service.update.retry']] - service.update.retry.factory: - alias: nhds.jobs.service.update.retry.factory \ No newline at end of file diff --git a/src/config/Service/Update/Wait.yml b/src/config/Service/Update/Wait.yml deleted file mode 100644 index 13308891..00000000 --- a/src/config/Service/Update/Wait.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.wait: - class: NHDS\Jobs\Service\Update\Wait - shared: false - service.update.wait: - alias: nhds.jobs.service.update.wait \ No newline at end of file diff --git a/src/config/Service/Update/Wait/Factory.yml b/src/config/Service/Update/Wait/Factory.yml deleted file mode 100644 index 1edfc836..00000000 --- a/src/config/Service/Update/Wait/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.wait.factory: - class: NHDS\Jobs\Service\Update\Wait\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateWait, ['@service.update.wait']] - service.update.wait.factory: - alias: nhds.jobs.service.update.wait.factory \ No newline at end of file diff --git a/src/config/Service/Update/Work.yml b/src/config/Service/Update/Work.yml deleted file mode 100644 index 030d4049..00000000 --- a/src/config/Service/Update/Work.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.service.update.work: - class: NHDS\Jobs\Service\Update\Work - shared: false - service.update.work: - alias: nhds.jobs.service.update.work \ No newline at end of file diff --git a/src/config/Service/Update/Work/Factory.yml b/src/config/Service/Update/Work/Factory.yml deleted file mode 100644 index b9382fd7..00000000 --- a/src/config/Service/Update/Work/Factory.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - nhds.jobs.service.update.work.factory: - class: NHDS\Jobs\Service\Update\Work\Factory - calls: - - [setStateService, ['@state.service']] - - [setServiceUpdateWork, ['@service.update.work']] - service.update.work.factory: - alias: nhds.jobs.service.update.work.factory \ No newline at end of file diff --git a/src/config/State/Service.yml b/src/config/State/Service.yml deleted file mode 100644 index 3157e56a..00000000 --- a/src/config/State/Service.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - nhds.jobs.state.service: - class: NHDS\Jobs\State\Service - shared: false - calls: - - [setTime, ['@nhds.toolkit.time']] - - [setTypeRepository, ['@type.repository']] - state.service: - alias: nhds.jobs.state.service \ No newline at end of file diff --git a/src/config/Type/Repository.yml b/src/config/Type/Repository.yml deleted file mode 100644 index 2ca95a70..00000000 --- a/src/config/Type/Repository.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.type.repository: - class: NHDS\Jobs\Type\Repository - calls: - - [setJobType, ['@data.job.type']] - type.repository: - alias: nhds.jobs.type.repository \ No newline at end of file diff --git a/src/config/Type/Service/Create.yml b/src/config/Type/Service/Create.yml deleted file mode 100644 index c7111028..00000000 --- a/src/config/Type/Service/Create.yml +++ /dev/null @@ -1,7 +0,0 @@ -services: - nhds.jobs.type.service.create: - class: NHDS\Jobs\Type\Service\Create - calls: - - [setJobType, ['@data.job.type']] - type.service.create: - alias: nhds.jobs.type.service.create \ No newline at end of file diff --git a/src/config/Worker/Bootstrap.yml b/src/config/Worker/Bootstrap.yml deleted file mode 100644 index d9ee412c..00000000 --- a/src/config/Worker/Bootstrap.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - nhds.jobs.worker.bootstrap: - class: NHDS\Jobs\Worker\Bootstrap - worker.bootstrap: - alias: nhds.jobs.worker.bootstrap \ No newline at end of file diff --git a/src/config/Worker/Locator.yml b/src/config/Worker/Locator.yml deleted file mode 100644 index 044eb5b4..00000000 --- a/src/config/Worker/Locator.yml +++ /dev/null @@ -1,6 +0,0 @@ -services: - nhds.jobs.worker.locator: - class: NHDS\Jobs\Worker\Locator - shared: false - worker.locator: - alias: nhds.jobs.worker.locator \ No newline at end of file diff --git a/src/config/root.yml b/src/config/root.yml deleted file mode 100644 index 2027b190..00000000 --- a/src/config/root.yml +++ /dev/null @@ -1,115 +0,0 @@ -services: - _defaults: - autowire: false - autoconfigure: false - public: false -imports: - # External dependencies. - - { resource: dependencies.yml } - - # Manager. - - { resource: Foreman.yml } - - { resource: Scheduler.yml } - - { resource: Maintainer.yml } - - { resource: Selector.yml } - - # Manger delegate. - - { resource: Maintainer/Delete.yml } - - { resource: Scheduler/Time.yml } - - { resource: Scheduler/Cache.yml } - - # Data. - - { resource: Data/Job/Type.yml } - - { resource: Data/Job/Type/Collection/Iterator.yml} - - { resource: Data/Job/Type/Collection/Scheduler.yml } - - { resource: Data/Job.yml } - - { resource: Data/Job/Collection/Scheduler.yml } - - { resource: Data/Job/Collection/Selector.yml } - - { resource: Data/Job/Collection/Iterator.yml } - - { resource: Data/Job/Collection/ScheduleLimit.yml } - - { resource: Data/Job/Collection/CrashDetection.yml } - - { resource: Data/Job/Collection/Delete.yml } - - { resource: Data/Job/Collection/Schedule/LimitCheck.yml } - - # Repository. - - { resource: Type/Repository.yml } - - { resource: Type/Service/Create.yml } - - # Factory. - - { resource: Service/Update/Crash/Factory.yml } - - { resource: Service/Create/Factory.yml } - - { resource: Service/Update/Work/Factory.yml } - - { resource: Service/Update/Complete/FailedScheduleLimitCheck/Factory.yml } - - { resource: Service/Update/Panic/Factory.yml } - - { resource: Service/Update/Wait/Factory.yml } - - { resource: Service/Update/Hold/Factory.yml } - - { resource: Service/Update/Retry/Factory.yml } - - { resource: Service/Update/Complete/Failed/Factory.yml } - - { resource: Service/Update/Complete/Success/Factory.yml } - - { resource: Semaphore/Resource/Factory.yml } - - { resource: Process/Pool/Factory.yml } - - # Services. - - { resource: State/Service.yml } - - { resource: Service/Create.yml } - - { resource: Service/Update/Crash.yml } - - { resource: Service/Update/Work.yml } - - { resource: Service/Update/Complete/FailedScheduleLimitCheck.yml } - - { resource: Service/Update/Panic.yml } - - { resource: Service/Update/Wait.yml } - - { resource: Service/Update/Hold.yml } - - { resource: Service/Update/Retry.yml } - - { resource: Service/Update/Complete/Failed.yml } - - { resource: Service/Update/Complete/Success.yml } - - # Semaphore. - - { resource: Semaphore/Resource.yml } - - { resource: Semaphore/Resource/Owner/Job.yml } - - { resource: Semaphore/Mutex/Flock.yml } - - { resource: Semaphore.yml } - - # Process. - - { resource: Process/Listener/Command.yml } - - { resource: Process/Job.yml } - - { resource: Process/Job/Required.yml } - - { resource: Process/Root.yml } - - { resource: Process/Pool/Logger.yml } - - { resource: Process/Pool/Server.yml } - - { resource: Process/Pool/Strategy.yml } - - { resource: Process/Pool.yml } - - { resource: Process/Collection.yml } - - { resource: Process/Collection/Iterator.yml } - - { resource: Process/Strategy/ProcessControl.yml } - - # Database. - - { resource: Db/Connection/Container.yml } - - { resource: Db/Setup.yml } - - { resource: Db/Setup/Schema/Version_0_0_0.yml } - - { resource: Db/Setup/Schema/Version_1_0_0.yml } - - { resource: Db/Setup/Schema/Version_2_0_0.yml } - - { resource: Db/Setup/Schema/Version_3_0_0.yml } - - { resource: Db/Setup/Schema/Version_4_0_0.yml } - - { resource: Db/Setup/Schema/Version_5_0_0.yml } - - { resource: Db/Setup/Schema/Version_6_0_0.yml } - - { resource: Db/TearDown.yml } - - { resource: Db/TearDown/Schema/Version_0_0_0.yml } - - { resource: Db/TearDown/Schema/Version_1_0_0.yml } - - { resource: Db/TearDown/Schema/Version_2_0_0.yml } - - { resource: Db/TearDown/Schema/Version_3_0_0.yml } - - { resource: Db/TearDown/Schema/Version_4_0_0.yml } - - { resource: Db/TearDown/Schema/Version_5_0_0.yml } - - { resource: Db/TearDown/Schema/Version_6_0_0.yml } - - # Message Broker. - - { resource: Message/Broker/Redis.yml } - - { resource: Message/Broker/Type/Collection.yml } - - # Worker. - - { resource: Worker/Locator.yml } - - { resource: Worker/Bootstrap.yml } - - { resource: Worker/Job/Service.yml } - - # Console. - - { resource: Console/Command/Process/Pool/Server/Start.yml } - - { resource: Console/Command/Db/Setup/Install.yml } - - { resource: Console/Command/Db/TearDown/Uninstall.yml } \ No newline at end of file diff --git a/tests/Application/Db/PDO/Builder.yml b/tests/Application/Db/PDO/Builder.yml new file mode 100644 index 00000000..42090b3c --- /dev/null +++ b/tests/Application/Db/PDO/Builder.yml @@ -0,0 +1,4 @@ +services: + db.pdo.builder: + public: true + alias: neighborhoods.kojo.db.pdo.builder \ No newline at end of file diff --git a/tests/Application/Db/Setup.yml b/tests/Application/Db/Setup.yml new file mode 100644 index 00000000..3ad370e8 --- /dev/null +++ b/tests/Application/Db/Setup.yml @@ -0,0 +1,4 @@ +services: + db.setup: + public: true + alias: neighborhoods.kojo.db.setup \ No newline at end of file diff --git a/tests/Application/Db/TearDown.yml b/tests/Application/Db/TearDown.yml new file mode 100644 index 00000000..8112468b --- /dev/null +++ b/tests/Application/Db/TearDown.yml @@ -0,0 +1,4 @@ +services: + db.tear_down: + public: true + alias: neighborhoods.kojo.db.tear_down \ No newline at end of file diff --git a/tests/Application/Environment/Parameters.yml b/tests/Application/Environment/Parameters.yml new file mode 100644 index 00000000..ac91cdb2 --- /dev/null +++ b/tests/Application/Environment/Parameters.yml @@ -0,0 +1,8 @@ +parameters: + neighborhoods.kojo.environment.parameters.redis_port: '%env(REDIS_PORT)%' + neighborhoods.kojo.environment.parameters.redis_host: '%env(REDIS_HOST)%' + neighborhoods.kojo.environment.parameters.database_user_name: '%env(DATABASE_USERNAME)%' + neighborhoods.kojo.environment.parameters.database_password: '%env(DATABASE_PASSWORD)%' + neighborhoods.kojo.environment.parameters.database_adapter: '%env(DATABASE_ADAPTER)%' + neighborhoods.kojo.environment.parameters.database_host: '%env(DATABASE_HOST)%' + neighborhoods.kojo.environment.parameters.database_name: '%env(DATABASE_NAME)%' \ No newline at end of file diff --git a/tests/Application/Foreman.yml b/tests/Application/Foreman.yml new file mode 100644 index 00000000..56e7f800 --- /dev/null +++ b/tests/Application/Foreman.yml @@ -0,0 +1,4 @@ +services: + foreman: + public: true + alias: neighborhoods.kojo.foreman \ No newline at end of file diff --git a/tests/Application/Process/Job.yml b/tests/Application/Process/Job.yml new file mode 100644 index 00000000..3debd31c --- /dev/null +++ b/tests/Application/Process/Job.yml @@ -0,0 +1,4 @@ +services: + process.job: + public: true + alias: neighborhoods.kojo.process.job \ No newline at end of file diff --git a/tests/Process/Strategy/Mock.php b/tests/Application/Process/Strategy/Mock.php similarity index 55% rename from tests/Process/Strategy/Mock.php rename to tests/Application/Process/Strategy/Mock.php index 28272263..282e1b4e 100644 --- a/tests/Process/Strategy/Mock.php +++ b/tests/Application/Process/Strategy/Mock.php @@ -1,9 +1,9 @@ _getTestContainerBuilder()->get('foreman'); + return $this->_getContainerBuilderFacade()->getContainerBuilder()->get('foreman'); } protected function _getSelector(): SelectorInterface { - return $this->_getTestContainerBuilder()->get('selector'); + return $this->_getContainerBuilderFacade()->getContainerBuilder()->get('selector'); } protected function _getJobProcess(): JobInterface { - return $this->_getTestContainerBuilder()->get('process.job'); - } - - protected function _getRequiredJobProcess(): JobInterface - { - return $this->_getTestContainerBuilder()->get('process.job.required'); + return $this->_getContainerBuilderFacade()->getContainerBuilder()->get('process.job'); } } \ No newline at end of file diff --git a/tests/Unit/fixtures/MaintainerInterfaceTest/1_job_types.yml b/tests/ForemanInterfaceTest/fixtures/workWorkers/1_job_types.yml similarity index 66% rename from tests/Unit/fixtures/MaintainerInterfaceTest/1_job_types.yml rename to tests/ForemanInterfaceTest/fixtures/workWorkers/1_job_types.yml index c592706f..a9195dab 100644 --- a/tests/Unit/fixtures/MaintainerInterfaceTest/1_job_types.yml +++ b/tests/ForemanInterfaceTest/fixtures/workWorkers/1_job_types.yml @@ -1,27 +1,29 @@ -nhds_job_type: +kojo_job_type: - - nhds_job_type_id: 1 + kojo_job_type_id: 1 type_code: "type_code_1" name: "Name 1" - worker_uri: "" + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 default_importance: 10 cron_expression: schedule_limit: 0 + schedule_limit_allowance: 1 is_enabled: 1 auto_complete_success: 1 auto_delete_interval_duration: 'PT0S' - - nhds_job_type_id: 2 + kojo_job_type_id: 2 type_code: "type_code_2" name: "Name 2" - worker_uri: "" + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 0 default_importance: 10 cron_expression: "* * * * *" - schedule_limit: 1 + schedule_limit: 3 + schedule_limit_allowance: 1 is_enabled: 1 auto_complete_success: 1 auto_delete_interval_duration: 'PT0S' \ No newline at end of file diff --git a/tests/Unit/fixtures/ForemanInterfaceTest/2_jobs.yml b/tests/ForemanInterfaceTest/fixtures/workWorkers/2_jobs.yml similarity index 85% rename from tests/Unit/fixtures/ForemanInterfaceTest/2_jobs.yml rename to tests/ForemanInterfaceTest/fixtures/workWorkers/2_jobs.yml index 8f2e972e..25636fae 100644 --- a/tests/Unit/fixtures/ForemanInterfaceTest/2_jobs.yml +++ b/tests/ForemanInterfaceTest/fixtures/workWorkers/2_jobs.yml @@ -1,6 +1,6 @@ -nhds_job: +kojo_job: - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -10,7 +10,7 @@ nhds_job: next_state_request: "working" assigned_state: "waiting" previous_state: "new" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -21,9 +21,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job.required' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -33,7 +32,7 @@ nhds_job: next_state_request: "working" assigned_state: "waiting" previous_state: "new" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -44,9 +43,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -56,7 +54,7 @@ nhds_job: next_state_request: "working" assigned_state: "waiting" previous_state: "new" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -67,9 +65,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -79,7 +76,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -90,9 +87,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -102,7 +98,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -113,9 +109,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -125,7 +120,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -136,9 +131,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -148,7 +142,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -159,9 +153,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -171,7 +164,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -182,9 +175,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -194,7 +186,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -205,9 +197,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -217,7 +208,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -228,9 +219,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -240,7 +230,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -251,9 +241,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -263,7 +252,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -274,9 +263,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -286,7 +274,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -297,9 +285,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -309,7 +296,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -320,9 +307,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -332,7 +318,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -343,9 +329,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -355,7 +340,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -366,9 +351,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -378,7 +362,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -389,9 +373,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -401,7 +384,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -412,9 +395,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -424,7 +406,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -435,9 +417,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -447,7 +428,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -458,9 +439,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -470,7 +450,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -481,9 +461,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -493,7 +472,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -504,9 +483,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -516,7 +494,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -527,9 +505,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -539,7 +516,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -550,9 +527,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -562,7 +538,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -573,9 +549,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -585,7 +560,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -596,9 +571,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -608,7 +582,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -619,9 +593,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -631,7 +604,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -642,9 +615,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -654,7 +626,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -665,9 +637,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -677,7 +648,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -688,9 +659,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -700,7 +670,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -711,9 +681,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -723,7 +692,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -734,9 +703,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -746,7 +714,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -757,9 +725,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -769,7 +736,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -780,9 +747,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -792,7 +758,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -803,9 +769,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -815,7 +780,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -826,9 +791,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -838,7 +802,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -849,9 +813,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -861,7 +824,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -872,9 +835,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -884,7 +846,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -895,9 +857,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -907,7 +868,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -918,9 +879,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -930,7 +890,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -941,9 +901,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -953,7 +912,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -964,9 +923,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -976,7 +934,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -987,9 +945,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -999,7 +956,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1010,9 +967,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1022,7 +978,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1033,9 +989,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1045,7 +1000,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1056,9 +1011,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1068,7 +1022,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1079,9 +1033,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1091,7 +1044,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1102,9 +1055,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1114,7 +1066,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1125,9 +1077,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1137,7 +1088,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1148,9 +1099,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1160,7 +1110,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1171,9 +1121,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1183,7 +1132,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1194,9 +1143,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1206,7 +1154,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1217,9 +1165,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1229,7 +1176,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1240,9 +1187,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1252,7 +1198,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1263,9 +1209,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1275,7 +1220,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1286,9 +1231,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1298,7 +1242,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1309,9 +1253,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1321,7 +1264,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1332,9 +1275,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1344,7 +1286,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1355,9 +1297,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1367,7 +1308,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1378,9 +1319,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1390,7 +1330,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1401,9 +1341,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1413,7 +1352,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1424,9 +1363,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1436,7 +1374,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1447,9 +1385,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1459,7 +1396,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1470,9 +1407,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1482,7 +1418,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1493,9 +1429,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1505,7 +1440,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1516,9 +1451,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1528,7 +1462,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1539,9 +1473,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1551,7 +1484,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1562,9 +1495,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1574,7 +1506,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1585,9 +1517,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1597,7 +1528,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1608,9 +1539,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1620,7 +1550,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1631,9 +1561,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1643,7 +1572,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1654,9 +1583,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1666,7 +1594,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1677,9 +1605,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1689,7 +1616,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1700,9 +1627,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1712,7 +1638,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1723,9 +1649,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1735,7 +1660,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1746,9 +1671,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1758,7 +1682,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1769,9 +1693,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1781,7 +1704,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1792,9 +1715,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1804,7 +1726,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1815,9 +1737,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1827,7 +1748,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1838,9 +1759,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1850,7 +1770,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1861,9 +1781,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1873,7 +1792,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1884,9 +1803,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1896,7 +1814,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1907,9 +1825,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1919,7 +1836,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1930,9 +1847,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1942,7 +1858,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1953,9 +1869,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1965,7 +1880,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1976,9 +1891,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -1988,7 +1902,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -1999,9 +1913,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2011,7 +1924,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2022,9 +1935,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2034,7 +1946,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2045,9 +1957,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2057,7 +1968,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2068,9 +1979,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2080,7 +1990,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2091,9 +2001,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2103,7 +2012,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2114,9 +2023,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2126,7 +2034,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2137,9 +2045,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2149,7 +2056,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2160,9 +2067,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2172,7 +2078,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2183,9 +2089,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2195,7 +2100,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2206,9 +2111,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2218,7 +2122,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2229,9 +2133,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2241,7 +2144,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2252,9 +2155,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2264,7 +2166,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2275,9 +2177,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2287,7 +2188,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2298,9 +2199,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2310,7 +2210,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2321,9 +2221,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2333,7 +2232,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2344,9 +2243,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2356,7 +2254,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2367,9 +2265,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2379,7 +2276,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2390,9 +2287,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2402,7 +2298,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2413,9 +2309,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2425,7 +2320,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2436,9 +2331,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2448,7 +2342,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2459,9 +2353,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2471,7 +2364,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2482,9 +2375,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2494,7 +2386,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2505,9 +2397,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2517,7 +2408,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2528,9 +2419,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2540,7 +2430,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2551,9 +2441,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2563,7 +2452,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2574,9 +2463,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2586,7 +2474,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2597,9 +2485,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2609,7 +2496,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2620,9 +2507,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2632,7 +2518,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2643,9 +2529,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2655,7 +2540,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2666,9 +2551,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2678,7 +2562,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2689,9 +2573,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2701,7 +2584,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2712,9 +2595,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2724,7 +2606,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2735,9 +2617,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2747,7 +2628,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2758,9 +2639,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2770,7 +2650,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2781,9 +2661,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2793,7 +2672,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2804,9 +2683,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2816,7 +2694,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2827,9 +2705,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2839,7 +2716,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2850,9 +2727,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2862,7 +2738,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2873,9 +2749,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2885,7 +2760,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2896,9 +2771,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2908,7 +2782,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2919,9 +2793,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2931,7 +2804,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2942,9 +2815,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2954,7 +2826,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2965,9 +2837,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -2977,7 +2848,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -2988,9 +2859,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3000,7 +2870,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3011,9 +2881,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3023,7 +2892,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3034,9 +2903,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3046,7 +2914,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3057,9 +2925,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3069,7 +2936,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3080,9 +2947,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3092,7 +2958,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3103,9 +2969,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3115,7 +2980,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3126,9 +2991,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3138,7 +3002,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3149,9 +3013,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3161,7 +3024,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3172,9 +3035,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3184,7 +3046,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3195,9 +3057,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3207,7 +3068,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3218,9 +3079,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3230,7 +3090,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3241,9 +3101,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3253,7 +3112,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3264,9 +3123,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3276,7 +3134,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3287,9 +3145,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3299,7 +3156,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3310,9 +3167,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3322,7 +3178,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3333,9 +3189,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3345,7 +3200,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3356,9 +3211,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3368,7 +3222,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3379,9 +3233,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3391,7 +3244,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3402,9 +3255,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3414,7 +3266,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3425,9 +3277,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3437,7 +3288,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3448,9 +3299,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3460,7 +3310,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3471,9 +3321,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3483,7 +3332,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3494,9 +3343,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3506,7 +3354,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3517,9 +3365,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3529,7 +3376,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3540,9 +3387,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3552,7 +3398,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3563,9 +3409,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3575,7 +3420,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3586,9 +3431,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3598,7 +3442,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3609,9 +3453,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3621,7 +3464,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3632,9 +3475,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3644,7 +3486,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3655,9 +3497,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3667,7 +3508,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3678,9 +3519,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3690,7 +3530,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3701,9 +3541,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3713,7 +3552,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3724,9 +3563,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3736,7 +3574,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3747,9 +3585,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3759,7 +3596,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3770,9 +3607,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3782,7 +3618,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3793,9 +3629,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3805,7 +3640,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3816,9 +3651,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3828,7 +3662,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3839,9 +3673,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3851,7 +3684,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3862,9 +3695,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3874,7 +3706,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3885,9 +3717,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3897,7 +3728,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3908,9 +3739,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3920,7 +3750,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3931,9 +3761,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3943,7 +3772,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3954,9 +3783,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3966,7 +3794,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -3977,9 +3805,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -3989,7 +3816,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4000,9 +3827,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4012,7 +3838,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4023,9 +3849,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4035,7 +3860,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4046,9 +3871,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4058,7 +3882,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4069,9 +3893,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4081,7 +3904,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4092,9 +3915,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4104,7 +3926,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4115,9 +3937,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4127,7 +3948,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4138,9 +3959,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4150,7 +3970,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4161,9 +3981,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4173,7 +3992,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4184,9 +4003,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4196,7 +4014,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4207,9 +4025,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4219,7 +4036,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4230,9 +4047,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4242,7 +4058,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4253,9 +4069,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4265,7 +4080,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4276,9 +4091,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4288,7 +4102,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4299,9 +4113,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4311,7 +4124,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4322,9 +4135,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4334,7 +4146,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4345,9 +4157,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4357,7 +4168,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4368,9 +4179,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4380,7 +4190,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4391,9 +4201,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4403,7 +4212,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4414,9 +4223,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4426,7 +4234,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4437,9 +4245,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4449,7 +4256,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4460,9 +4267,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4472,7 +4278,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4483,9 +4289,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4495,7 +4300,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4506,9 +4311,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4518,7 +4322,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4529,9 +4333,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_1" name: "Name 1" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4541,7 +4344,7 @@ nhds_job: next_state_request: "none" assigned_state: "working" previous_state: "waiting" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4552,9 +4355,8 @@ nhds_job: times_crashed: 0 times_panicked: 0 created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job' - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') + kojo_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') type_code: "type_code_2" name: "Name 2" priority: !fixture/expression: numberPool.getCurrentNumber('job_id') @@ -4564,7 +4366,7 @@ nhds_job: next_state_request: "schedule_limit_check" assigned_state: "waiting" previous_state: "new" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' + worker_uri: '\Neighborhoods\Kojo\Test\Worker\Mock' worker_method: "work" can_work_in_parallel: 1 last_transition_date_time: "2010-04-26 12:14:20" @@ -4574,5 +4376,4 @@ nhds_job: times_held: 0 times_crashed: 0 times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - process_type_code: 'job.required' \ No newline at end of file + created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') \ No newline at end of file diff --git a/tests/Unit/MaintainerInterfaceTest.php b/tests/Unit/MaintainerInterfaceTest.php deleted file mode 100644 index e6f2201d..00000000 --- a/tests/Unit/MaintainerInterfaceTest.php +++ /dev/null @@ -1,33 +0,0 @@ -_getTestContainerBuilder()->get('nhds.jobs.maintainer'); - $maintainer->deleteCompletedJobs(); - - return $this; - } - - public function testUpdatePendingJobs() - { - $maintainer = $this->_getTestContainerBuilder()->get('nhds.jobs.maintainer'); - $maintainer->updatePendingJobs(); - - return $this; - } - - public function testRescheduleCrashedJobs() - { - $maintainer = $this->_getTestContainerBuilder()->get('nhds.jobs.maintainer'); - $maintainer->rescheduleCrashedJobs(); - - return $this; - } -} \ No newline at end of file diff --git a/tests/Unit/Process/PooIInterfaceTest.php b/tests/Unit/Process/PooIInterfaceTest.php deleted file mode 100644 index 0c4623e3..00000000 --- a/tests/Unit/Process/PooIInterfaceTest.php +++ /dev/null @@ -1,18 +0,0 @@ -_getTestContainerBuilder()->get('nhds.jobs.process.pool.server'); - -// $server->start(); - } -} \ No newline at end of file diff --git a/tests/Unit/Process/Pool/config/ServerInterfaceTest.yml b/tests/Unit/Process/Pool/config/ServerInterfaceTest.yml deleted file mode 100644 index e23396a3..00000000 --- a/tests/Unit/Process/Pool/config/ServerInterfaceTest.yml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: ../../../..//config/root.yml } \ No newline at end of file diff --git a/tests/Unit/SchedulerInterfaceTest.php b/tests/Unit/SchedulerInterfaceTest.php deleted file mode 100644 index 0a34cb23..00000000 --- a/tests/Unit/SchedulerInterfaceTest.php +++ /dev/null @@ -1,17 +0,0 @@ -_getTestContainerBuilder()->get('nhds.jobs.scheduler'); - $scheduler->scheduleStaticJobs(); - - return $this; - } -} \ No newline at end of file diff --git a/tests/Unit/SelectorInterfaceTest.php b/tests/Unit/SelectorInterfaceTest.php deleted file mode 100644 index b715627e..00000000 --- a/tests/Unit/SelectorInterfaceTest.php +++ /dev/null @@ -1,17 +0,0 @@ -_getTestContainerBuilder()->get('selector'); - $selector->pick(); - - return $this; - } -} \ No newline at end of file diff --git a/tests/Unit/SemaphoreInterfaceTest.php b/tests/Unit/SemaphoreInterfaceTest.php deleted file mode 100644 index dcfb05de..00000000 --- a/tests/Unit/SemaphoreInterfaceTest.php +++ /dev/null @@ -1,27 +0,0 @@ -_getTestContainerBuilder()->get('nhds.jobs.semaphore'); - $resource = $this->_getTestContainerBuilder()->get('nhds.jobs.semaphore.resource-job'); - $job = $this->_getTestContainerBuilder()->get('nhds.jobs.data.job'); - $job->setId(15); - $job->setTypeCode('type_code'); - $job->setCanWorkInParallel(true); - $resourceOwner = $resource->getResourceOwner(); - if ($resourceOwner instanceof Owner\Job) { - $resourceOwner->setJob($job); - } - $semaphore->testAndSetLock($resource); - - return $this; - } -} \ No newline at end of file diff --git a/tests/Unit/Service/CreateInterfaceTest.php b/tests/Unit/Service/CreateInterfaceTest.php deleted file mode 100644 index b4f541f6..00000000 --- a/tests/Unit/Service/CreateInterfaceTest.php +++ /dev/null @@ -1,20 +0,0 @@ -_getTestContainerBuilder()->get('nhds.toolkit.time'); - $create = $this->_getTestContainerBuilder()->get('service.create'); - $create->setJobTypeCode('type_code_2'); - $create->setWorkAtDateTime($time->getNow()); - $create->save(); - - return $this; - } -} \ No newline at end of file diff --git a/tests/Unit/Service/config/CreateInterfaceTest.yml b/tests/Unit/Service/config/CreateInterfaceTest.yml deleted file mode 100644 index e0b8911f..00000000 --- a/tests/Unit/Service/config/CreateInterfaceTest.yml +++ /dev/null @@ -1,16 +0,0 @@ -imports: - - { resource: ../../../../../../src/config/root.yml } -services: - nhds.jobs.db.connection.container-schema: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_SCHEMA')"]] - - [setPdo, ["@pdo"]] - nhds.jobs.db.connection.container-job: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_JOB')"]] - - [setPdo, ["@pdo"]] - pdo: - class: \Pdo - arguments: ['mysql:dbname=jobs;host=mysql', 'root', 'nhdsroot'] \ No newline at end of file diff --git a/tests/Unit/Service/fixtures/CreateInterfaceTest/1_job_types.yml b/tests/Unit/Service/fixtures/CreateInterfaceTest/1_job_types.yml deleted file mode 100644 index 144a92af..00000000 --- a/tests/Unit/Service/fixtures/CreateInterfaceTest/1_job_types.yml +++ /dev/null @@ -1,23 +0,0 @@ -nhds_job_type: - - - nhds_job_type_id: 1 - type_code: "type_code_1" - name: "Name 1" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - default_importance: 10 - cron_expression: - schedule_limit: 0 - is_enabled: 1 - - - nhds_job_type_id: 2 - type_code: "type_code_2" - name: "Name 2" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 0 - default_importance: 10 - cron_expression: "* * * * *" - schedule_limit: 12 - is_enabled: 1 \ No newline at end of file diff --git a/tests/Unit/Service/fixtures/CreateInterfaceTest/2_jobs.yml b/tests/Unit/Service/fixtures/CreateInterfaceTest/2_jobs.yml deleted file mode 100644 index 415c3192..00000000 --- a/tests/Unit/Service/fixtures/CreateInterfaceTest/2_jobs.yml +++ /dev/null @@ -1,1782 +0,0 @@ -nhds_job: - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().add(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('P1D')).format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "new" - previous_state: "empty" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 \ No newline at end of file diff --git a/tests/Unit/config/ForemanInterfaceTest.yml b/tests/Unit/config/ForemanInterfaceTest.yml deleted file mode 100644 index 2badce77..00000000 --- a/tests/Unit/config/ForemanInterfaceTest.yml +++ /dev/null @@ -1,15 +0,0 @@ -imports: - - { resource: ../../config/root.yml } -services: - foreman: - public: true - alias: nhds.jobs.foreman - selector: - public: true - alias: nhds.jobs.selector - process.job: - public: true - alias: nhds.jobs.process.job - process.job.required: - public: true - alias: nhds.jobs.process.job.required \ No newline at end of file diff --git a/tests/Unit/config/MaintainerInterfaceTest.yml b/tests/Unit/config/MaintainerInterfaceTest.yml deleted file mode 100644 index 1e618df2..00000000 --- a/tests/Unit/config/MaintainerInterfaceTest.yml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: ../../config/root.yml } \ No newline at end of file diff --git a/tests/Unit/config/SchedulerInterfaceTest.yml b/tests/Unit/config/SchedulerInterfaceTest.yml deleted file mode 100644 index 1e618df2..00000000 --- a/tests/Unit/config/SchedulerInterfaceTest.yml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: ../../config/root.yml } \ No newline at end of file diff --git a/tests/Unit/config/SelectorInterfaceTest.yml b/tests/Unit/config/SelectorInterfaceTest.yml deleted file mode 100644 index 01aef659..00000000 --- a/tests/Unit/config/SelectorInterfaceTest.yml +++ /dev/null @@ -1,6 +0,0 @@ -imports: - - { resource: ../../config/root.yml } -services: - selector: - public: true - alias: nhds.jobs.selector \ No newline at end of file diff --git a/tests/Unit/config/SemaphoreInterfaceTest.yml b/tests/Unit/config/SemaphoreInterfaceTest.yml deleted file mode 100644 index 1e618df2..00000000 --- a/tests/Unit/config/SemaphoreInterfaceTest.yml +++ /dev/null @@ -1,2 +0,0 @@ -imports: - - { resource: ../../config/root.yml } \ No newline at end of file diff --git a/tests/Unit/fixtures/ForemanInterfaceTest/1_job_types.yml b/tests/Unit/fixtures/ForemanInterfaceTest/1_job_types.yml deleted file mode 100644 index df79818c..00000000 --- a/tests/Unit/fixtures/ForemanInterfaceTest/1_job_types.yml +++ /dev/null @@ -1,29 +0,0 @@ -nhds_job_type: - - - nhds_job_type_id: 1 - type_code: "type_code_1" - name: "Name 1" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' - worker_method: "work" - can_work_in_parallel: 1 - default_importance: 10 - cron_expression: - schedule_limit: 0 - is_enabled: 1 - auto_complete_success: 1 - auto_delete_interval_duration: 'PT0S' - process_type_code: 'job' - - - nhds_job_type_id: 2 - type_code: "type_code_2" - name: "Name 2" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' - worker_method: "work" - can_work_in_parallel: 0 - default_importance: 10 - cron_expression: "* * * * *" - schedule_limit: 3 - is_enabled: 1 - auto_complete_success: 1 - auto_delete_interval_duration: 'PT0S' - process_type_code: 'job.required' \ No newline at end of file diff --git a/tests/Unit/fixtures/MaintainerInterfaceTest/2_jobs.yml b/tests/Unit/fixtures/MaintainerInterfaceTest/2_jobs.yml deleted file mode 100644 index 070658de..00000000 --- a/tests/Unit/fixtures/MaintainerInterfaceTest/2_jobs.yml +++ /dev/null @@ -1,441 +0,0 @@ -nhds_job: - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_1" - name: "Name 1" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "none" - assigned_state: "working" - previous_state: "waiting" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - - - nhds_job_id: !fixture/expression: numberPool.advance('job_id').getCurrentNumber('job_id') - type_code: "type_code_2" - name: "Name 2" - priority: !fixture/expression: numberPool.getCurrentNumber('job_id') - importance: !fixture/expression: numberPool.getCurrentNumber('job_id') - status_id: !fixture/expression: numberPool.getCurrentNumber('job_id') - work_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') - next_state_request: "working" - assigned_state: "pending_limit_check" - previous_state: "new" - worker_uri: "" - worker_method: "work" - can_work_in_parallel: 1 - last_transition_date_time: "2010-04-26 12:14:20" - last_transition_micro_time: 1511915506563849 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') \ No newline at end of file diff --git a/tests/Unit/fixtures/SchedulerInterfaceTest/2_jobs.yml b/tests/Unit/fixtures/SchedulerInterfaceTest/2_jobs.yml deleted file mode 100644 index f37382a9..00000000 --- a/tests/Unit/fixtures/SchedulerInterfaceTest/2_jobs.yml +++ /dev/null @@ -1,67 +0,0 @@ -nhds_job: -- - nhds_job_id: 2 - type_code: type_code_2 - name: 'Name 2' - priority: 10 - importance: 10 - status_id: null - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('PT3M')).format('Y-m-d H:i:s') - next_state_request: schedule_limit_check - assigned_state: waiting - previous_state: new - worker_uri: \NHDS\Jobs\Test\Worker\Mock - worker_method: work - can_work_in_parallel: 0 - last_transition_date_time: '2018-01-12 20:54:49' - last_transition_micro_time: 1515790489896748 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') -- - nhds_job_id: 3 - type_code: type_code_2 - name: 'Name 2' - priority: 10 - importance: 10 - status_id: null - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('PT2M')).format('Y-m-d H:i:s') - next_state_request: schedule_limit_check - assigned_state: waiting - previous_state: new - worker_uri: \NHDS\Jobs\Test\Worker\Mock - worker_method: work - can_work_in_parallel: 0 - last_transition_date_time: '2018-01-12 20:54:49' - last_transition_micro_time: 1515790489908615 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') -- - nhds_job_id: 4 - type_code: type_code_2 - name: 'Name 2' - priority: 10 - importance: 10 - status_id: null - work_at_date_time: !fixture/expression: time.getNow().sub(time.getNewDateInterval('PT1M')).format('Y-m-d H:i:s') - next_state_request: schedule_limit_check - assigned_state: waiting - previous_state: new - worker_uri: \NHDS\Jobs\Test\Worker\Mock - worker_method: work - can_work_in_parallel: 0 - last_transition_date_time: '2018-01-12 20:54:49' - last_transition_micro_time: 1515790489914568 - times_worked: 0 - times_retried: 0 - times_held: 0 - times_crashed: 0 - times_panicked: 0 - created_at_date_time: !fixture/expression: time.getNow().format('Y-m-d H:i:s') diff --git a/tests/Unit/fixtures/SelectorInterfaceTest/1_job_types.yml b/tests/Unit/fixtures/SelectorInterfaceTest/1_job_types.yml deleted file mode 100644 index df79818c..00000000 --- a/tests/Unit/fixtures/SelectorInterfaceTest/1_job_types.yml +++ /dev/null @@ -1,29 +0,0 @@ -nhds_job_type: - - - nhds_job_type_id: 1 - type_code: "type_code_1" - name: "Name 1" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' - worker_method: "work" - can_work_in_parallel: 1 - default_importance: 10 - cron_expression: - schedule_limit: 0 - is_enabled: 1 - auto_complete_success: 1 - auto_delete_interval_duration: 'PT0S' - process_type_code: 'job' - - - nhds_job_type_id: 2 - type_code: "type_code_2" - name: "Name 2" - worker_uri: '\NHDS\Jobs\Test\Worker\Mock' - worker_method: "work" - can_work_in_parallel: 0 - default_importance: 10 - cron_expression: "* * * * *" - schedule_limit: 3 - is_enabled: 1 - auto_complete_success: 1 - auto_delete_interval_duration: 'PT0S' - process_type_code: 'job.required' \ No newline at end of file diff --git a/tests/config/Process/Strategy/Mock.yml b/tests/config/Process/Strategy/Mock.yml deleted file mode 100644 index 8caee831..00000000 --- a/tests/config/Process/Strategy/Mock.yml +++ /dev/null @@ -1,3 +0,0 @@ -services: - nhds.jobs.test.process.strategy.mock: - class: NHDS\Jobs\Test\Process\Strategy\Mock diff --git a/tests/config/root.yml b/tests/config/root.yml deleted file mode 100644 index 5d3d51da..00000000 --- a/tests/config/root.yml +++ /dev/null @@ -1,32 +0,0 @@ -imports: - - { resource: ../../../src/config/root.yml } - - { resource: Process/Strategy/Mock.yml } -services: - nhds.jobs.db.connection.container-schema: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_SCHEMA')"]] - - [setPdo, ["@pdo"]] - nhds.jobs.db.connection.container-job: - class: NHDS\Jobs\Db\Connection\Container - calls: - - [setName, ["@=constant('NHDS\\\\Jobs\\\\Db\\\\Connection\\\\ContainerInterface::NAME_JOB')"]] - - [setPdo, ["@pdo"]] - pdo: - class: \Pdo - arguments: ['mysql:dbname=jobs;host=mysql', 'root', 'nhdsroot'] - nhds.jobs.process.pool.logger: - class: NHDS\Jobs\Process\Pool\Logger - calls: - - [setIsEnabled, [false]] - db.tear_down: - public: true - alias: nhds.jobs.db.tear_down - db.setup: - public: true - alias: nhds.jobs.db.setup - redis: - public: true - class: \Redis - calls: - - [connect, ['redis', '6379']] \ No newline at end of file