]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add status engine website
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Tue, 16 Jun 2020 13:23:20 +0000 (15:23 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Tue, 16 Jun 2020 14:16:00 +0000 (16:16 +0200)
33 files changed:
modules/private/default.nix
modules/private/environment.nix
modules/private/monitoring/default.nix
modules/private/monitoring/objects_common.nix
modules/private/monitoring/plugins/check_command
modules/private/monitoring/plugins/check_emails
modules/private/monitoring/plugins/check_eriomem
modules/private/monitoring/plugins/check_ftp_database
modules/private/monitoring/plugins/check_git
modules/private/monitoring/plugins/check_imap_connection
modules/private/monitoring/plugins/check_last_file_date
modules/private/monitoring/plugins/check_mysql_replication
modules/private/monitoring/plugins/check_openldap_replication
modules/private/monitoring/plugins/check_ovh_sms
modules/private/monitoring/plugins/check_postgres_replication
modules/private/monitoring/plugins/check_redis_replication
modules/private/monitoring/status_engine.nix [new file with mode: 0644]
modules/private/websites/default.nix
modules/private/websites/tools/performance/default.nix [new file with mode: 0644]
pkgs/default.nix
pkgs/gearmand/default.nix [new file with mode: 0644]
pkgs/naemon/default.nix
pkgs/naemon/naemon.json
pkgs/status_engine/host_perfdata.patch [new file with mode: 0644]
pkgs/status_engine/interface.nix [new file with mode: 0644]
pkgs/status_engine/interface_composer.lock [new file with mode: 0644]
pkgs/status_engine/interface_php_packages.nix [new file with mode: 0644]
pkgs/status_engine/module.json [new file with mode: 0644]
pkgs/status_engine/module.nix [new file with mode: 0644]
pkgs/status_engine/worker.json [new file with mode: 0644]
pkgs/status_engine/worker.nix [new file with mode: 0644]
pkgs/status_engine/worker_composer.lock [new file with mode: 0644]
pkgs/status_engine/worker_php_packages.nix [new file with mode: 0644]

index 17dedd4dcf7aa0654e82ae75aebce124a00734ef..cf9dc85e23a53efc778316edacbe30a5ff0a771b 100644 (file)
@@ -84,6 +84,7 @@ set = {
   mastodonTool = ./websites/tools/mastodon;
   mgoblinTool = ./websites/tools/mgoblin;
   peertubeTool = ./websites/tools/peertube;
+  performanceTool = ./websites/tools/performance;
   toolsTool = ./websites/tools/tools;
   mailTool = ./websites/tools/mail;
 
@@ -105,6 +106,7 @@ set = {
   ssh = ./ssh;
   monitoring = ./monitoring;
   status = ./monitoring/status.nix;
+  status_engine = ./monitoring/status_engine.nix;
   vpn = ./vpn;
 
   environment = ./environment.nix;
index 82e39817190ac31cf6efccb979cba58824366a43..3a805c601b7693cf87f3f68ab95e5dfc96bd1180 100644 (file)
@@ -1020,6 +1020,15 @@ in
               };
             };
           };
+          status_engine = mkOption {
+            description = "Status Engine configuration";
+            type = submodule {
+              options = {
+                mysql = mkMysqlOptions "StatusEngine" {};
+                ldap = mkLdapOptions "StatusEngine" {};
+              };
+            };
+          };
           task = mkOption {
             description = "Taskwarrior configuration";
             type = submodule {
index 349ba8a291b4599df6b75946a3f391562f4f8c43..8ae0b306fe1b951a48b13162f55670e27780382b 100644 (file)
@@ -241,7 +241,6 @@ in
     services.naemon = {
       enable = true;
       extraConfig = ''
-        broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live
         use_syslog=1
         log_initial_states=1
         date_format=iso8601
@@ -249,6 +248,9 @@ in
       '' + lib.optionalString (!cfg.master) ''
         obsess_over_services=1
         ocsp_command=notify-master
+      '' + lib.optionalString (cfg.master) ''
+        broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live
+        broker_module=${pkgs.status_engine.module}/lib/status-engine/naemon/statusengine-${pkgs.naemon.status_engine_version}.o use_service_perfdata=1 use_process_data=0 use_system_command_data=0 use_external_command_data=0 use_flapping_data=0 use_program_status_data=0 use_notification_data=0 use_contact_status_data=0 use_contact_notification_data=0 use_event_handler_data=0 use_object_data=0
       '';
       extraResource = ''
         $USER2$=${myplugins}
index e9b1b51e2c83bac9d5440f2939ff12c4d0d998c3..2585c389cd7343bf495b9b93f8b4c439542bc71e 100644 (file)
@@ -133,7 +133,7 @@ in
     notify-service-by-email = "ADMINEMAIL=\"$ADMINEMAIL$\" SERVICENOTIFICATIONID=\"$SERVICENOTIFICATIONID$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_email service \"$NOTIFICATIONTYPE$\" \"$HOSTALIAS$\" \"$LONGDATETIME$\" \"$CONTACTEMAIL$\" $OVE";
     notify-by-slack = "HOST=\"$HOSTALIAS$\" SERVICESTATE=\"$SERVICESTATE$\" SERVICEDESC=\"$SERVICEDESC$\" SERVICEOUTPUT=\"$SERVICEOUTPUT$\" $USER2$/notify_by_slack \"$ARG1$\" \"$ARG2$\"";
 
-    notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$\"";
+    notify-master = "$USER2$/send_nrdp.sh -u \"$USER200$\" -t \"$USER201$\" -H \"$HOSTADDRESS$\" -s \"$SERVICEDESC$\" -S \"$SERVICESTATEID$\" -o \"$SERVICEOUTPUT$ | $SERVICEPERFDATA$\"";
   };
   timeperiod = {
     "24x7" = {
index 55779fd1a266fd187f2cc74719a082887033a6df..2b546c1f3c0ae3fa43ba36da889646f1689a54cc 100755 (executable)
@@ -57,30 +57,30 @@ if ($other_command ne '') {
 
 chomp($cmd_result);
 if ($cmd_result =~ /sudo/i) {
-  print "$command CRITICAL - No sudo right to run the command\n";
+  print "$command CRITICAL - No sudo right to run the command | result=1;;;;\n";
   exit($STATE_UNKNOWN);
 } elsif ($expected_status ne '') {
     if ($? != $expected_status) {
-      print "$command CRITICAL - Response status $?\n";
+      print "$command CRITICAL - Response status $? | result=1;;;;\n";
       exit($STATE_CRITICAL);
     } else {
-      print "$command OK - Response status $?\n";
+      print "$command OK - Response status $? | result=0;;;;\n";
       exit($STATE_OK);
     }
 } elsif ($other_command ne '') {
   if ($cmd_result ne $other_cmd_result) {
-    print "$command CRITICAL - Expected output not matching other command output\n";
+    print "$command CRITICAL - Expected output not matching other command output | result=1;;;;\n";
     exit($STATE_CRITICAL);
   } else {
-    print "$command OK - Expected output matching other command output\n";
+    print "$command OK - Expected output matching other command output | result=0;;;;\n";
     exit($STATE_OK);
   }
 } else {
   if ($cmd_result !~ /$expected_output/) {
-    print "$command CRITICAL - Expected output not matching\n";
+    print "$command CRITICAL - Expected output not matching | result=1;;;;\n";
     exit($STATE_CRITICAL);
   } else {
-    print "$command OK - Expected output matching\n";
+    print "$command OK - Expected output matching | result=0;;;;\n";
     exit($STATE_OK);
   }
 }
index 5a8453e70f7aa82b182e54c4c77a2724728ca15d..534e5a5096bf3943c766ba4c92ac15e529510923 100755 (executable)
@@ -61,6 +61,7 @@ foreach my $line (@lines) {
 }
 
 my $output = "";
+my $old = 0;
 foreach my $email_from (@emails_to_expect) {
   my @email_split = split(/:/, $email_from);
   my $email = $email_split[0];
@@ -73,16 +74,17 @@ foreach my $email_from (@emails_to_expect) {
     if ($current_date - $email_date > 60*30) {
       $output = "$output$email ($found_emails{$email} from $from) ";
     }
+    $old = ($current_date - $email_date) > $old ? ($current_date - $email_date) : $old;
   } else {
     $output = "$output$email (missing) "
   }
 }
 
 if ($output ne '') {
-  print "Emails $host CRITICAL - expecting emails: $output\n";
+  print "Emails $host CRITICAL - expecting emails: $output | timestamp=${old}s;;;;\n";
   exit($STATE_CRITICAL);
 } else {
-  print "Emails $host OK\n";
+  print "Emails $host OK | timestamp=${old}s;;;;\n";
   exit($STATE_OK);
 }
 
index f91d1e4304ed49d910388d751d8f6a58ddd33b60..880b88a0bd85fcbcfa131bc502559c7fd1f63701 100755 (executable)
@@ -47,7 +47,7 @@ def main():
         for p in ps:
             os.kill(p.pid, signal.SIGTERM)
         output(STATE_UNKNOWN,
-                "eriomem UNKNOWN - Command timeout after 60 seconds!")
+                "Eriomem UNKNOWN - Command timeout after 60 seconds!")
 
     signal.alarm(0)
 
@@ -57,20 +57,20 @@ def main():
         use_percent = 100 * usage / max_size
         if use_percent > critical_percent:
             output(STATE_CRITICAL,
-                    "eriomem CRITICAL - bucket usage: %s (%s%%);| size=%s;;;;" %
-                    (sizeof_fmt(usage), use_percent, usage))
+                    "Eriomem CRITICAL - bucket usage: %s (%s%%);| size=%s;;;;" %
+                    (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
         elif use_percent > warning_percent:
             output(STATE_WARNING,
-                    "eriomem WARNING - bucket usage: %s (%s%%);| size=%s;;;;" %
-                    (sizeof_fmt(usage), use_percent, usage))
+                    "Eriomem WARNING - bucket usage: %s (%s%%);| size=%s;;;;" %
+                    (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
         else:
             output(STATE_OK,
-                    "eriomem OK - bucket usage: %s (%d%%);| size=%s;;;;" %
-                    (sizeof_fmt(usage), use_percent, usage))
+                    "Eriomem OK - bucket usage: %s (%d%%);| size=%s;;;;" %
+                    (sizeof_fmt(usage), use_percent, sizeof_fmt(usage)))
     else:
         messages = "\n".join([out[0].decode() + out[1].decode() for out in outs])
         output(STATE_UNKNOWN,
-                "eriomem Unknown - Error in command\n" + messages)
+                "Eriomem UNKNOWN - Error in command")
 
 def sizeof_fmt(num):
     for unit in ['','ko','Mo','Go','To','Po','Eo','Zo']:
index 9a414246b3fbaa48ad9ff532e7c106aff538ee3e..f9cf5793225e20ba4b30183ac1d2cb03a6a0e4aa 100755 (executable)
@@ -3,9 +3,9 @@
 OUT=$(echo "ls" | lftp -u test_ftp,test_ftp eldiron.immae.eu | grep it_works | wc -l)
 
 if [ "$OUT" -eq 1 ]; then
-  echo "ftp connection OK - access to ftp is working"
+  echo "ftp connection OK - access to ftp is working | ftp=1;;;;"
   exit 0
 else
-  echo "ftp connection CRITICAL - no access to ftp"
+  echo "ftp connection CRITICAL - no access to ftp | ftp=0;;;;"
   exit 2
 fi
index 8c09925cfbf06bcddfc4bb6e492e64a101fd51f9..e8fbb29d12c7fabe1485472a27d2143113f154a8 100755 (executable)
@@ -13,6 +13,7 @@ trap "rm -rf $TMPDIR" EXIT
 
 ERRORS=""
 OUTPUT=""
+PERFS=""
 
 cd "$TMPDIR"
 OUT=$(git clone -q git://git.immae.eu/perso/Immae/Projets/Ruby/Monitor.git 2>&1)
@@ -22,7 +23,10 @@ OUTPUT="$OUTPUT
 $OUT"
 fi
 if [ "$ERR" != 0 ]; then
+  PERFS="$PERFS git=0;;;;"
   ERRORS="$ERRORS git://"
+else
+  PERFS="$PERFS git=1;;;;"
 fi
 rm -rf Monitor
 
@@ -34,6 +38,9 @@ $OUT"
 fi
 if [ "$ERR" != 0 ]; then
   ERRORS="$ERRORS http://"
+  PERFS="$PERFS http=0;;;;"
+else
+  PERFS="$PERFS http=1;;;;"
 fi
 rm -rf Monitor
 
@@ -45,6 +52,9 @@ $OUT"
 fi
 if [ "$ERR" != 0 ]; then
   ERRORS="$ERRORS https://"
+  PERFS="$PERFS https=0;;;;"
+else
+  PERFS="$PERFS https=1;;;;"
 fi
 rm -rf Monitor
 
@@ -56,13 +66,16 @@ $OUT"
 fi
 if [ "$ERR" != 0 ]; then
   ERRORS="$ERRORS ssh"
+  PERFS="$PERFS ssh=0;;;;"
+else
+  PERFS="$PERFS ssh=1;;;;"
 fi
 rm -rf Monitor
 
 if [ -n "$ERRORS" ]; then
-  echo "gitolite CRITICAL - impossible to clone via$ERRORS|$OUTPUT"
+  echo "gitolite CRITICAL - impossible to clone via$ERRORS | $PERFS"
   exit 2
 else
-  echo "gitolite OK - ssh, git, http and https work|$OUTPUT"
+  echo "gitolite OK - ssh, git, http and https work | $PERFS"
   exit 0
 fi
index 304eae6ea9b4f2efaf37456e150c2c6561bf9f02..c1ab0dd469e41f3a867adee8ab8fff4bd0b04aa0 100755 (executable)
@@ -26,10 +26,10 @@ my $expected_result = "a OK Logged in";
 
 chomp($cmd_result);
 if ($cmd_result !~ /$expected_result/) {
-  print "IMAP CRITICAL - Unable to connect via imaps\n";
+  print "IMAP CRITICAL - Unable to connect via imaps | imap=0;;;;\n";
   exit($STATE_CRITICAL);
 } else {
-  print "IMAP OK - imaps connected successfully\n";
+  print "IMAP OK - imaps connected successfully | imap=1;;;;\n";
   exit($STATE_OK);
 }
 
index df45bbc5f44d6a11789f0638c5a32c7503718508..f51a25814c08e3e161842dbb56305a12294de11c 100755 (executable)
@@ -15,12 +15,14 @@ if [ -z "$last_date" ]; then
   exit $STATE_UNKNOWN
 else
   LC_ALL=C last_date=$(printf "%.*f" 0 $last_date)
+  LC_ALL=C age=$(( $(date "+%s") - $last_date))
+  max_age=$(( $hours * 60 * 60 ))
   min_date=$(date -d "$hours hours ago" "+%s")
   if [ "$min_date" -lt "$last_date" ]; then
-    echo "OK: Last file $(date -d @$last_date)"
+    echo "OK: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;"
     exit $STATE_OK
   else
-    echo "CRITICAL: Last file $(date -d @$last_date)"
+    echo "CRITICAL: Last file $(date -d @$last_date) | age=${age}s;;$max_age;;"
     exit $STATE_CRITICAL
   fi
 fi
index 89239281b3da089fb6128a0fd4615de8baaa5c62..4027f63f0ec57f45fd5df19caacf7b57b9496e74 100755 (executable)
@@ -23,13 +23,13 @@ else
   LC_ALL=C lag=$(printf "%.*f" 0 $lag)
 
   if [[ $lag -lt 5 ]]; then
-    echo "OK - $output"
+    echo "OK - $output | time=${lag}s;5;10;;"
     exit $STATE_OK
   elif [[ $lag -lt 10 ]]; then
-    echo "WARNING - $output"
+    echo "WARNING - $output | time=${lag}s;5;10;;"
     exit $STATE_WARNING
   else
-    echo "CRITICAL - $output"
+    echo "CRITICAL - $output | time=${lag}s;5;10;;"
     exit $STATE_CRITICAL
   fi
 fi
index b511ff203b1d42af641aa04df6fdb5e7eee1ec20..7136ad5b5025f7318e098e3a9d804bb5089a82d1 100755 (executable)
@@ -42,13 +42,13 @@ else
   LC_ALL=C lag=$(printf "%.*f" 0 $lag)
 
   if [[ $offset -lt 5 ]]; then
-    echo "OK - $output"
+    echo "OK - $output | time=${offset}s;5;10;;"
     exit $STATE_OK
   elif [[ $offset -lt 10 ]]; then
-    echo "WARNING - $output"
+    echo "WARNING - $output | time=${offset}s;5;10;;"
     exit $STATE_WARNING
   else
-    echo "CRITICAL - $output"
+    echo "CRITICAL - $output | time=${offset}s;5;10;;"
     exit $STATE_CRITICAL
   fi
 fi
index 141f82d9893ca40db39d3f5c98828851cbe8271e..caf279c359a956bea22aee597499c897a66513f7 100755 (executable)
@@ -15,10 +15,10 @@ try:
     result = client.get('/sms/{}'.format(account))["creditsLeft"]
 
     if result < 20:
-        print("SMS OVH Critical - Not enough sms left ({})|SMS {}".format(result, result))
+        print("SMS OVH Critical - Not enough sms left ({})|SMS={};;;;".format(result, result))
         sys.exit(2)
     else:
-        print("SMS OVH Ok - Enough sms left ({})|SMS {}".format(result, result))
+        print("SMS OVH Ok - Enough sms left ({})|SMS={};;;;".format(result, result))
         sys.exit(0)
 except Exception:
     print("SMS OVH UNKNOWN - Error during script")
index 009b4d580b30de7810d7cf02cba139445a87bb45..ff257a353e23eddb59aa4e59721b6a695e09fadb 100755 (executable)
@@ -23,13 +23,13 @@ else
   LC_ALL=C lag=$(printf "%.*f" 0 $lag)
 
   if [[ $lag -lt 5 ]]; then
-    echo "OK - $output"
+    echo "OK - $output | time=${lag}s;5;10;0;"
     exit $STATE_OK
   elif [[ $lag -lt 10 ]]; then
-    echo "WARNING - $output"
+    echo "WARNING - $output | time=${lag}s;5;10;0;"
     exit $STATE_WARNING
   else
-    echo "CRITICAL - $output"
+    echo "CRITICAL - $output | time=${lag}s;5;10;0;"
     exit $STATE_CRITICAL
   fi
 fi
index 7a884e1100631f1d741859aa241b56df0c023c88..6dbe4c4e7b6795bbaae50bbc37bef6276d3e43e7 100755 (executable)
@@ -26,13 +26,13 @@ else
   LC_ALL=C lag=$(printf "%.*f" 0 $lag)
 
   if [[ $lag -lt 5 && $offset -lt 5 ]]; then
-    echo "OK - $output"
+    echo "OK - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
     exit $STATE_OK
   elif [[ $lag -lt 10 && $offset -lt 10 ]]; then
-    echo "WARNING - $output"
+    echo "WARNING - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
     exit $STATE_WARNING
   else
-    echo "CRITICAL - $output"
+    echo "CRITICAL - $output | time=${lag}s;5;10;0; offset=${offset};5;10;0;"
     exit $STATE_CRITICAL
   fi
 fi
diff --git a/modules/private/monitoring/status_engine.nix b/modules/private/monitoring/status_engine.nix
new file mode 100644 (file)
index 0000000..c74a44d
--- /dev/null
@@ -0,0 +1,109 @@
+{ config, pkgs, lib, name, ... }:
+let
+  package = pkgs.status_engine.worker.override { config_file = config.secrets.fullPaths."status_engine"; };
+  env = config.myEnv.tools.status_engine;
+in
+{
+  config = lib.mkIf config.myServices.status.enable {
+    systemd.services.gearmand = {
+      description = "Gearman daemon";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      serviceConfig = {
+        DynamicUser = true;
+        User = "gearmand";
+        Type = "simple";
+        ExecStart = "${pkgs.gearmand}/bin/gearmand --syslog -L 127.0.0.1 -q libsqlite3 --libsqlite3-db /var/lib/gearmand/gearmand.db --store-queue-on-shutdown -l stderr -P /run/gearmand/gearmand.pid";
+        RuntimeDirectory = "gearmand";
+        StateDirectory = "gearmand";
+      };
+    };
+
+    secrets.keys = [{
+      dest = "status_engine";
+      permissions = "0400";
+      user = "naemon";
+      group = "naemon";
+      text = ''
+        node_name: ${name}
+        use_gearman: 1
+        gearman:
+          address: 127.0.0.1
+          port: 4730
+          timeout: 1000
+        use_rabbitmq: 0
+        use_redis: 1
+        redis:
+          address: 127.0.0.1
+          port: 6379
+          db: 0
+        store_live_data_in_archive_backend: 1
+        use_mysql: 1
+        mysql:
+          host: ${env.mysql.remoteHost}
+          port: ${env.mysql.port}
+          username: ${env.mysql.user}
+          password: ${env.mysql.password}
+          database: ${env.mysql.database}
+        use_crate: 0
+        number_of_bulk_records: 100
+        max_bulk_delay: 5
+        number_servicestatus_worker: 1
+        number_hoststatus_worker: 1
+        number_logentry_worker: 1
+        number_statechange_worker: 1
+        number_hostcheck_worker: 1
+        number_servicecheck_worker: 1
+        number_misc_worker: 1
+
+        process_perfdata: 1
+        number_perfdata_worker: 1
+        perfdata_backend:
+          - mysql
+
+        check_for_commands: 1
+        command_check_interval: 15
+        external_command_file: /run/naemon/naemon.cmd
+        query_handler: /run/naemon/naemon.qh
+        submit_method: qh
+
+        syslog_enabled: 1
+        syslog_tag: statusengine-worker
+
+        # Archive age
+        age_hostchecks: 5
+        age_host_acknowledgements: 60
+        age_host_notifications: 60
+        age_host_statehistory: 365
+        age_host_downtimes: 60
+        age_servicechecks: 5
+        age_service_acknowledgements: 60
+        age_service_notifications: 60
+        age_service_statehistory: 365
+        age_service_downtimes: 60
+        age_logentries: 5
+        age_tasks: 1
+        age_perfdata: 90
+
+        disable_http_proxy: 1
+      '';
+    }];
+
+    services.redis = rec {
+      enable = true;
+      bind = "127.0.0.1";
+    };
+
+    systemd.services.status_engine_worker = {
+      description = "Status engine worker";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      serviceConfig = {
+        Type = "simple";
+        Restart = "on-failure";
+        User = "naemon";
+        ExecStart = "${package}/bin/StatusengineWorker.php";
+      };
+    };
+  };
+}
index 864d5d90e2f800f7a09b5a5a615266e22908ede4..f84567e8c8cf85c3b6519537e8f603daceb6a328 100644 (file)
@@ -295,6 +295,7 @@ in
       tools.mastodon.enable = true;
       tools.mediagoblin.enable = true;
       tools.peertube.enable = true;
+      tools.performance.enable = true;
       tools.tools.enable = true;
       tools.email.enable = true;
 
diff --git a/modules/private/websites/tools/performance/default.nix b/modules/private/websites/tools/performance/default.nix
new file mode 100644 (file)
index 0000000..df2b58d
--- /dev/null
@@ -0,0 +1,89 @@
+{ pkgs, lib, config, ... }:
+let
+  env = config.myEnv.tools.status_engine;
+  package = pkgs.status_engine.interface.override({ config_file = config.secrets.fullPaths."status_engine_ui"; });
+  apacheRoot = "${package}/public";
+  cfg = config.myServices.websites.tools.performance;
+in
+{
+  options.myServices.websites.tools.performance = {
+    enable = lib.mkEnableOption "Enable performance website";
+  };
+
+  config = lib.mkIf cfg.enable {
+    secrets.keys = [
+      {
+        dest = "status_engine_ui";
+        permissions = "0400";
+        user = "wwwrun";
+        group = "wwwrun";
+        text = ''
+          allow_anonymous: 0
+          anonymous_can_submit_commands: 0
+          urls_without_login:
+            - login
+            - loginstate
+          auth_type: ldap
+          ldap_server: ${env.ldap.host}
+          ldap_use_ssl: 1
+          ldap_port: 636
+          ldap_bind_dn: ${env.ldap.dn}
+          ldap_bind_password: ${env.ldap.password}
+          ldap_base_dn: ${env.ldap.base}
+          ldap_filter: "${env.ldap.filter}"
+          ldap_attribute:
+            - memberOf
+          use_crate: 0
+          use_mysql: 1
+          mysql:
+              host: 127.0.0.1
+              port: ${env.mysql.port}
+              username: ${env.mysql.user}
+              password: ${env.mysql.password}
+              database: ${env.mysql.database}
+          display_perfdata: 1
+          perfdata_backend: mysql
+        '';
+      }
+    ];
+
+    services.websites.env.tools.modules = [ "proxy_fcgi" ];
+
+    services.websites.env.tools.vhostConfs.performance = {
+      certName   = "eldiron";
+      addToCerts = true;
+      hosts      = [ "performance.immae.eu" ];
+      root       = apacheRoot;
+      extraConfig = [
+        ''
+          <Directory ${apacheRoot}>
+            DirectoryIndex index.html
+            AllowOverride None
+            Require all granted
+            <FilesMatch "\.php$">
+              SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost"
+            </FilesMatch>
+          </Directory>
+        ''
+      ];
+    };
+
+    services.phpfpm.pools.status_engine = {
+      user = "wwwrun";
+      group = "wwwrun";
+      settings = {
+        "listen.owner" = "wwwrun";
+        "listen.group" = "wwwrun";
+        "pm" = "dynamic";
+        "pm.max_children" = "60";
+        "pm.start_servers" = "2";
+        "pm.min_spare_servers" = "1";
+        "pm.max_spare_servers" = "10";
+
+        "php_admin_value[open_basedir]" = "${package}:/tmp:/var/secrets/status_engine_ui";
+      };
+      phpPackage = pkgs.php74;
+    };
+
+  };
+}
index 03fee4f99add7442192dc0e33c3c2cd3b1862777..702f4cfc55a9e12b72b354a97889ae9960cd9361 100644 (file)
@@ -51,6 +51,12 @@ rec {
   monitoring-plugins = callPackage ./monitoring-plugins {};
   naemon = callPackage ./naemon { inherit mylibs monitoring-plugins; };
   naemon-livestatus = callPackage ./naemon-livestatus { inherit mylibs naemon; };
+  gearmand = callPackage ./gearmand {};
+  status_engine = {
+    module = callPackage ./status_engine/module.nix { inherit mylibs; };
+    worker = callPackage ./status_engine/worker.nix { inherit mylibs composerEnv; };
+    interface = callPackage ./status_engine/interface.nix { inherit composerEnv; };
+  };
 
   python3PackagesPlus = callPackage ./python-packages {
     python = python3;
diff --git a/pkgs/gearmand/default.nix b/pkgs/gearmand/default.nix
new file mode 100644 (file)
index 0000000..bb3be89
--- /dev/null
@@ -0,0 +1,16 @@
+{ stdenv, fetchurl, boost, gperf, libevent, libmysqlclient, libuuid, python3, sqlite, hiredis, postgresql, openssl }:
+stdenv.mkDerivation rec {
+  pname = "gearmand";
+  version = "1.1.19.1";
+  src = fetchurl {
+    url = "https://github.com/gearman/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1yvb2r3n89p43nchsi3d4nwl0f4xsiy8msnacmm4x4hcdb8y19lf";
+  };
+  buildInputs = [ boost gperf libevent openssl libmysqlclient libuuid sqlite hiredis postgresql ];
+  configureFlags = [
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost}/lib"
+    "--with-openssl=${openssl.dev}"
+    "--enable-ssl"
+  ];
+}
index 080a226d4dfd7ead0894350619ffc78b018da0f9..034129675967ac405053ea8da8a1a9e2ef953592 100644 (file)
@@ -9,6 +9,7 @@
   group  ? "naemon"
 }:
 stdenv.mkDerivation (mylibs.fetchedGithub ./naemon.json // {
+  passthru.status_engine_version = "1-1-0";
   preConfigure = ''
     ./autogen.sh || true
     '';
index c68647f6f5fbf310f115a13ac1ccf159558dd677..2dc9809caf813744f9a2b583127ff5e0a7396587 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "tag": "ba6fd20-master",
+  "tag": "d7ac1c8-master",
   "meta": {
     "name": "naemon",
     "url": "https://github.com/naemon/naemon-core",
@@ -8,8 +8,8 @@
   "github": {
     "owner": "naemon",
     "repo": "naemon-core",
-    "rev": "ba6fd20221fbdd5c99b4eb5dcf4ee5681c5a9495",
-    "sha256": "15rvqg985nn05rsgkch4ix8y2wg7a6pb70d63ckzy1inwqjp8z46",
+    "rev": "d7ac1c824e01dbb1c4a6bd0550b324e7cf165d54",
+    "sha256": "003grwciplnqfn9jh2km2pm6xxp8fxvmwihg3vmch8f0vfwcmv1m",
     "fetchSubmodules": true
   }
 }
diff --git a/pkgs/status_engine/host_perfdata.patch b/pkgs/status_engine/host_perfdata.patch
new file mode 100644 (file)
index 0000000..0c8a20b
--- /dev/null
@@ -0,0 +1,47 @@
+diff --git a/src/statusengine.c b/src/statusengine.c
+index cc0b06e..2a18dec 100644
+--- a/src/statusengine.c
++++ b/src/statusengine.c
+@@ -304,6 +304,7 @@ int enable_ocsp = 0;
+ int use_restart_data=1;
+ int use_service_perfdata=0;
++int use_host_perfdata=0;
+ int statusengine_process_config_var(char *arg);
+ int statusengine_process_module_args(char *args);
+@@ -612,6 +613,9 @@ int statusengine_process_config_var(char *arg) {
+       } else if (!strcmp(var, "use_service_perfdata")) {
+               use_service_perfdata = atoi(val);
+               logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_service_perfdata");
++      } else if (!strcmp(var, "use_host_perfdata")) {
++              use_host_perfdata = atoi(val);
++              logswitch(NSLOG_INFO_MESSAGE, "start with enabled use_host_perfdata");
+       } else {
+               return ERROR;
+       }
+@@ -1067,6 +1071,24 @@ int statusengine_handle_data(int event_type, void *data){
+                                       json_object_put(my_object);
+                                       free(raw_command);
++                                      if(use_host_perfdata){
++                                              my_object = json_object_new_object();
++                                              json_object_object_add(my_object, "type",      json_object_new_int(hostcheck->type));
++                                              json_object_object_add(my_object, "flags",     json_object_new_int(hostcheck->flags));
++                                              json_object_object_add(my_object, "attr",      json_object_new_int(hostcheck->attr));
++                                              json_object_object_add(my_object, "timestamp", json_object_new_int(hostcheck->timestamp.tv_sec));
++
++                                              json_object *hostcheck_object = json_object_new_object();
++                                              HOSTCHECKFIELD_STRING(host_name);
++                                              HOSTCHECKFIELD_STRING(perf_data);
++                                              json_object_object_add(hostcheck_object, "start_time", json_object_new_int64(nag_hostcheck->start_time.tv_sec));
++
++                                              json_object_object_add(my_object, "hostcheck", hostcheck_object);
++                                              const char* json_string = json_object_to_json_string(my_object);
++                                              statusengine_send_job("statusngin_host_perfdata", (void *)json_string);
++
++                                              json_object_put(my_object);
++                                      }
+                               }
+                               break;
diff --git a/pkgs/status_engine/interface.nix b/pkgs/status_engine/interface.nix
new file mode 100644 (file)
index 0000000..7ee4889
--- /dev/null
@@ -0,0 +1,21 @@
+{ stdenv, composerEnv, fetchurl, callPackage, config_file ? "/var/lib/status_engine/interface.yml" }:
+composerEnv.buildPackage (
+  import ./interface_php_packages.nix { inherit composerEnv fetchurl; } // rec {
+    pname = "interface";
+    version = "3.4.0";
+    name = "${pname}-${version}";
+    src = fetchurl {
+      url = "https://github.com/statusengine/${pname}/archive/${version}.tar.gz";
+      sha256 = "1l11cskv740xvqs9a2yj9zkvgvxvymaq5qap36g2r4hkqbfbbjj2";
+    };
+    unpackPhase = null;
+    postUnpack = ''
+      src=$(pwd)/$sourceRoot
+      '';
+    postInstall = ''
+      ln -s ${config_file} $out/etc/config.yml
+      '';
+    preInstall = ''
+      cp ${./interface_composer.lock} $out/composer.lock
+    '';
+  })
diff --git a/pkgs/status_engine/interface_composer.lock b/pkgs/status_engine/interface_composer.lock
new file mode 100644 (file)
index 0000000..8911d9f
--- /dev/null
@@ -0,0 +1,1323 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "668fd19407022566bb6a70398e2f954e",
+    "packages": [
+        {
+            "name": "crate/crate-dbal",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/crate/crate-dbal.git",
+                "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417",
+                "reference": "f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417",
+                "shasum": ""
+            },
+            "require": {
+                "crate/crate-pdo": "^1.0.0",
+                "doctrine/dbal": "^2.10.1",
+                "php": "^7.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.0",
+                "squizlabs/php_codesniffer": "~1.5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Crate\\DBAL": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Crate.io",
+                    "email": "office@crate.io",
+                    "homepage": "https://crate.io",
+                    "role": "maintainer"
+                }
+            ],
+            "description": "Doctrine Database Abstraction Layer (DBAL) adapter for CrateDB",
+            "homepage": "https://github.com/crate/crate-dbal",
+            "keywords": [
+                "crate",
+                "database",
+                "dbal",
+                "doctrine"
+            ],
+            "time": "2020-01-08T08:31:16+00:00"
+        },
+        {
+            "name": "crate/crate-pdo",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/crate/crate-pdo.git",
+                "reference": "33332cef1a27844e473265e584223f142c37317f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f",
+                "reference": "33332cef1a27844e473265e584223f142c37317f",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pdo": "*",
+                "guzzlehttp/guzzle": "~6.0",
+                "php": "^7.2"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^0.9.2",
+                "phpunit/phpunit": "~7.0",
+                "squizlabs/php_codesniffer": "^2.8.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Crate\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Crate.io",
+                    "email": "office@crate.io",
+                    "homepage": "https://crate.io",
+                    "role": "maintainer"
+                }
+            ],
+            "description": "PDO adapter for CrateDB",
+            "homepage": "https://github.com/crate/crate-pdo",
+            "keywords": [
+                "crate",
+                "database",
+                "pdo"
+            ],
+            "time": "2019-04-09T07:48:20+00:00"
+        },
+        {
+            "name": "doctrine/cache",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/cache.git",
+                "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
+                "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
+                "shasum": ""
+            },
+            "require": {
+                "php": "~7.1 || ^8.0"
+            },
+            "conflict": {
+                "doctrine/common": ">2.2,<2.4"
+            },
+            "require-dev": {
+                "alcaeus/mongo-php-adapter": "^1.1",
+                "doctrine/coding-standard": "^6.0",
+                "mongodb/mongodb": "^1.1",
+                "phpunit/phpunit": "^7.0",
+                "predis/predis": "~1.0"
+            },
+            "suggest": {
+                "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+            "homepage": "https://www.doctrine-project.org/projects/cache.html",
+            "keywords": [
+                "abstraction",
+                "apcu",
+                "cache",
+                "caching",
+                "couchdb",
+                "memcached",
+                "php",
+                "redis",
+                "xcache"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-27T16:24:54+00:00"
+        },
+        {
+            "name": "doctrine/dbal",
+            "version": "2.10.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/dbal.git",
+                "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8",
+                "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/cache": "^1.0",
+                "doctrine/event-manager": "^1.0",
+                "ext-pdo": "*",
+                "php": "^7.2"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "jetbrains/phpstorm-stubs": "^2019.1",
+                "nikic/php-parser": "^4.4",
+                "phpstan/phpstan": "^0.12",
+                "phpunit/phpunit": "^8.4.1",
+                "symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
+                "vimeo/psalm": "^3.11"
+            },
+            "suggest": {
+                "symfony/console": "For helpful console commands such as SQL execution and import of files."
+            },
+            "bin": [
+                "bin/doctrine-dbal"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.10.x-dev",
+                    "dev-develop": "3.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                }
+            ],
+            "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
+            "homepage": "https://www.doctrine-project.org/projects/dbal.html",
+            "keywords": [
+                "abstraction",
+                "database",
+                "db2",
+                "dbal",
+                "mariadb",
+                "mssql",
+                "mysql",
+                "oci8",
+                "oracle",
+                "pdo",
+                "pgsql",
+                "postgresql",
+                "queryobject",
+                "sasql",
+                "sql",
+                "sqlanywhere",
+                "sqlite",
+                "sqlserver",
+                "sqlsrv"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-20T17:19:26+00:00"
+        },
+        {
+            "name": "doctrine/event-manager",
+            "version": "1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/event-manager.git",
+                "reference": "629572819973f13486371cb611386eb17851e85c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c",
+                "reference": "629572819973f13486371cb611386eb17851e85c",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1"
+            },
+            "conflict": {
+                "doctrine/common": "<2.9@dev"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\": "lib/Doctrine/Common"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                },
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com"
+                }
+            ],
+            "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
+            "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
+            "keywords": [
+                "event",
+                "event dispatcher",
+                "event manager",
+                "event system",
+                "events"
+            ],
+            "time": "2019-11-10T09:48:07+00:00"
+        },
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "6.5.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "guzzlehttp/promises": "^1.0",
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+                "psr/log": "^1.1"
+            },
+            "suggest": {
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2020-05-25T19:35:05+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-12-20T10:07:11+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0",
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-zlib": "*",
+                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+            },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "time": "2019-07-01T23:21:34+00:00"
+        },
+        {
+            "name": "nikic/fast-route",
+            "version": "v1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/nikic/FastRoute.git",
+                "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+                "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35|~5.7"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "FastRoute\\": "src/"
+                },
+                "files": [
+                    "src/functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Nikita Popov",
+                    "email": "nikic@php.net"
+                }
+            ],
+            "description": "Fast request router for PHP",
+            "keywords": [
+                "router",
+                "routing"
+            ],
+            "time": "2018-02-13T20:26:39+00:00"
+        },
+        {
+            "name": "paragonie/random_compat",
+            "version": "v9.99.99",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+                "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*|5.*",
+                "vimeo/psalm": "^1"
+            },
+            "suggest": {
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "keywords": [
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
+            ],
+            "time": "2018-07-02T15:55:56+00:00"
+        },
+        {
+            "name": "pimple/pimple",
+            "version": "v3.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/silexphp/Pimple.git",
+                "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930",
+                "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5",
+                "psr/container": "^1.0"
+            },
+            "require-dev": {
+                "symfony/phpunit-bridge": "^3.4|^4.4|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Pimple": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                }
+            ],
+            "description": "Pimple, a simple Dependency Injection Container",
+            "homepage": "https://pimple.symfony.com",
+            "keywords": [
+                "container",
+                "dependency injection"
+            ],
+            "time": "2020-03-03T09:12:48+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/getallheaders.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.com"
+                }
+            ],
+            "description": "A polyfill for getallheaders.",
+            "time": "2019-03-08T08:55:37+00:00"
+        },
+        {
+            "name": "slim/csrf",
+            "version": "0.8.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/slimphp/Slim-Csrf.git",
+                "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7",
+                "reference": "5f2bcf5d89adf86dc0455a32bea84d912ab466a7",
+                "shasum": ""
+            },
+            "require": {
+                "paragonie/random_compat": "^1.1|^2.0|^9.99",
+                "php": ">=5.5.0",
+                "psr/http-message": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0",
+                "slim/slim": "~3.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Slim\\Csrf\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Josh Lockhart",
+                    "email": "hello@joshlockhart.com",
+                    "homepage": "http://joshlockhart.com"
+                }
+            ],
+            "description": "Slim Framework 3 CSRF protection middleware",
+            "homepage": "http://slimframework.com",
+            "keywords": [
+                "csrf",
+                "framework",
+                "middleware",
+                "slim"
+            ],
+            "time": "2018-08-22T16:12:18+00:00"
+        },
+        {
+            "name": "slim/slim",
+            "version": "3.12.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/slimphp/Slim.git",
+                "reference": "1c9318a84ffb890900901136d620b4f03a59da38"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38",
+                "reference": "1c9318a84ffb890900901136d620b4f03a59da38",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-simplexml": "*",
+                "nikic/fast-route": "^1.0",
+                "php": ">=5.5.0",
+                "pimple/pimple": "^3.0",
+                "psr/container": "^1.0",
+                "psr/http-message": "^1.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0",
+                "squizlabs/php_codesniffer": "^2.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Slim\\": "Slim"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Josh Lockhart",
+                    "email": "hello@joshlockhart.com",
+                    "homepage": "https://joshlockhart.com"
+                },
+                {
+                    "name": "Andrew Smith",
+                    "email": "a.smith@silentworks.co.uk",
+                    "homepage": "http://silentworks.co.uk"
+                },
+                {
+                    "name": "Rob Allen",
+                    "email": "rob@akrabat.com",
+                    "homepage": "http://akrabat.com"
+                },
+                {
+                    "name": "Gabriel Manricks",
+                    "email": "gmanricks@me.com",
+                    "homepage": "http://gabrielmanricks.com"
+                }
+            ],
+            "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
+            "homepage": "https://slimframework.com",
+            "keywords": [
+                "api",
+                "framework",
+                "micro",
+                "router"
+            ],
+            "time": "2019-11-28T17:40:33+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
+                "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1|~3.0.0",
+                "symfony/process": "~2.1|~3.0.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "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 Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-11-30T12:35:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "f79824187de95064a2f5038904c4d7f0227fedb5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5",
+                "reference": "f79824187de95064a2f5038904c4d7f0227fedb5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "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 Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-11-30T12:35:10+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.5.9",
+        "ext-ldap": "*"
+    },
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
+}
diff --git a/pkgs/status_engine/interface_php_packages.nix b/pkgs/status_engine/interface_php_packages.nix
new file mode 100644 (file)
index 0000000..d81e83c
--- /dev/null
@@ -0,0 +1,217 @@
+# Generated with composer2nix and adapted to return only the list of
+# packages
+{ composerEnv, fetchurl }:
+{
+  packages = {
+    "crate/crate-dbal" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "crate-crate-dbal-f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417";
+        src = fetchurl {
+          url = https://api.github.com/repos/crate/crate-dbal/zipball/f5e3f5cb4f2d32f00d2dde2b91beae17f38ff417;
+          sha256 = "0778m29av1nj6596b7x6xz6frd41nrswn20r327lpdfw7y6b19ni";
+        };
+      };
+    };
+    "crate/crate-pdo" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "crate-crate-pdo-33332cef1a27844e473265e584223f142c37317f";
+        src = fetchurl {
+          url = https://api.github.com/repos/crate/crate-pdo/zipball/33332cef1a27844e473265e584223f142c37317f;
+          sha256 = "11w30hyr0lfw800aakl0ii8pwdv7vzpbjklw0z96hzsky788hfa7";
+        };
+      };
+    };
+    "doctrine/cache" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-cache-35a4a70cd94e09e2259dfae7488afc6b474ecbd3";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3;
+          sha256 = "1fk0c8vhjgl7j4b2vd4k7sshdrqysqwcp9mlxbapf8x7nmpa6i9b";
+        };
+      };
+    };
+    "doctrine/dbal" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-dbal-aab745e7b6b2de3b47019da81e7225e14dcfdac8";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8;
+          sha256 = "04c6r4p1b0iknjk95hpc4fsyxg8s2x1skfmnx2g11z64jvldzs62";
+        };
+      };
+    };
+    "doctrine/event-manager" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-event-manager-629572819973f13486371cb611386eb17851e85c";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c;
+          sha256 = "02zglsk2zfnpabs83an7zg18h2k31h00vzk6qpawvmy35r1vmrfn";
+        };
+      };
+    };
+    "guzzlehttp/guzzle" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-guzzle-a4a1b6930528a8f7ee03518e6442ec7a44155d9d";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d;
+          sha256 = "0midln6ji6b990vkc0syn631nf6r94lv5600dcc26lcivz8c4gk3";
+        };
+      };
+    };
+    "guzzlehttp/promises" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646;
+          sha256 = "1kpl91fzalcgkcs16lpakvzcnbkry3id4ynx6xhq477p4fipdciz";
+        };
+      };
+    };
+    "guzzlehttp/psr7" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a;
+          sha256 = "0mfq93x7ayix6l3v5jkk40a9hnmrxaqr9vk1r26q39d1s6292ma7";
+        };
+      };
+    };
+    "nikic/fast-route" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "nikic-fast-route-181d480e08d9476e61381e04a71b34dc0432e812";
+        src = fetchurl {
+          url = https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812;
+          sha256 = "0sjqivm0gp6d6nal58n4r5wzyi21r4hdzn4v31ydgjgni7877p4i";
+        };
+      };
+    };
+    "paragonie/random_compat" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "paragonie-random_compat-84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95";
+        src = fetchurl {
+          url = https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95;
+          sha256 = "03nsccdvcb79l64b7lsmx0n8ldf5z3v8niqr7bpp6wg401qp9p09";
+        };
+      };
+    };
+    "pimple/pimple" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "pimple-pimple-e55d12f9d6a0e7f9c85992b73df1267f46279930";
+        src = fetchurl {
+          url = https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930;
+          sha256 = "0xmx8jc9shh2a63wg6574g6qc63w3nvr7w4062d97sbgnn62r6hw";
+        };
+      };
+    };
+    "psr/container" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-container-b7ce3b176482dbbc1245ebf52b181af44c2cf55f";
+        src = fetchurl {
+          url = https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f;
+          sha256 = "0rkz64vgwb0gfi09klvgay4qnw993l1dc03vyip7d7m2zxi6cy4j";
+        };
+      };
+    };
+    "psr/http-message" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363";
+        src = fetchurl {
+          url = https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363;
+          sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45";
+        };
+      };
+    };
+    "ralouphie/getallheaders" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822";
+        src = fetchurl {
+          url = https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822;
+          sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg";
+        };
+      };
+    };
+    "slim/csrf" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "slim-csrf-5f2bcf5d89adf86dc0455a32bea84d912ab466a7";
+        src = fetchurl {
+          url = https://api.github.com/repos/slimphp/Slim-Csrf/zipball/5f2bcf5d89adf86dc0455a32bea84d912ab466a7;
+          sha256 = "1n8q8cgc2y60z7waqw9xyq9pl9dvww85rbdcnap55d5a55api8j5";
+        };
+      };
+    };
+    "slim/slim" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "slim-slim-1c9318a84ffb890900901136d620b4f03a59da38";
+        src = fetchurl {
+          url = https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38;
+          sha256 = "08s7y7apz609vg745wr61nn0ji029zvnd0435fn3kmn57f8lgq7x";
+        };
+      };
+    };
+    "symfony/console" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-console-d232bfc100dfd32b18ccbcab4bcc8f28697b7e41";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41;
+          sha256 = "16kgs7x60y3vj0bbmljj80hq1x8fb6w1g0fd1j2hc1cbphgj8x67";
+        };
+      };
+    };
+    "symfony/polyfill-intl-idn" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-intl-idn-3bff59ea7047e925be6b7f2059d60af31bb46d6a";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a;
+          sha256 = "0c26v3xpchyiqckp663n7i3hgswbzy56r0jdwjizrsgqq731h6fp";
+        };
+      };
+    };
+    "symfony/polyfill-mbstring" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-mbstring-fa79b11539418b02fc5e1897267673ba2c19419c";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c;
+          sha256 = "17m46mkkcv7fsxf71si0cq8xdf6b1k272mc5bfwgl00h8s9bk0rs";
+        };
+      };
+    };
+    "symfony/polyfill-php72" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-php72-f048e612a3905f34931127360bdd2def19a5e582";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582;
+          sha256 = "1lkjxh17nfaglh7v2m3zw2fy6b2w8nmxr7jb1gqqpvg74yqqz83f";
+        };
+      };
+    };
+    "symfony/yaml" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-yaml-f79824187de95064a2f5038904c4d7f0227fedb5";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5;
+          sha256 = "1pwx4bckfjz0afz62q02vl0i4wmg3c6f963jrhlx247b1z6isram";
+        };
+      };
+    };
+  };
+}
diff --git a/pkgs/status_engine/module.json b/pkgs/status_engine/module.json
new file mode 100644 (file)
index 0000000..5ed06d2
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "tag": "d461e95-master",
+  "meta": {
+    "name": "statusengine-module",
+    "url": "https://github.com/statusengine/module",
+    "branch": "master"
+  },
+  "github": {
+    "owner": "statusengine",
+    "repo": "module",
+    "rev": "d461e95a11fffaac604d11ac42d237b5e13071bc",
+    "sha256": "1awmq9rck9xy82pambnd2wh66ndif8x8jpk4qbbghs9f2sd48x1n",
+    "fetchSubmodules": true
+  }
+}
diff --git a/pkgs/status_engine/module.nix b/pkgs/status_engine/module.nix
new file mode 100644 (file)
index 0000000..43d2b09
--- /dev/null
@@ -0,0 +1,10 @@
+{ stdenv, mylibs, gearmand, json_c, libuuid, libevent, pkgconfig, glib }:
+stdenv.mkDerivation (mylibs.fetchedGithub ./module.json // {
+  patches = [ ./host_perfdata.patch ];
+  buildInputs = [ gearmand json_c libuuid libevent pkgconfig glib ];
+  makeFlags = "all";
+  installPhase = ''
+    mkdir -p $out/lib/status-engine
+    cp -a src/bin/* $out/lib/status-engine
+    '';
+})
diff --git a/pkgs/status_engine/worker.json b/pkgs/status_engine/worker.json
new file mode 100644 (file)
index 0000000..301bab5
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "tag": "02267d4-master",
+  "meta": {
+    "name": "worker",
+    "url": "https://github.com/statusengine/worker",
+    "branch": "master"
+  },
+  "github": {
+    "owner": "statusengine",
+    "repo": "worker",
+    "rev": "02267d495ae69137d6765dc6b0f453f80216f1cf",
+    "sha256": "06ci4mkmifdf1z15yc8rxl44ppi45vjz4s136yaccq9d8vk9iyd4",
+    "fetchSubmodules": true
+  }
+}
diff --git a/pkgs/status_engine/worker.nix b/pkgs/status_engine/worker.nix
new file mode 100644 (file)
index 0000000..6c14449
--- /dev/null
@@ -0,0 +1,25 @@
+{ stdenv, mylibs, composerEnv, fetchurl, gearmand, callPackage, php73, php73base, config_file ? "/var/lib/status_engine/ui.yml" }:
+let
+  # FIXME: present in php73.buildPecl in latest nixpkgs-unstable
+  gearman = (callPackage <nixpkgs/pkgs/build-support/build-pecl.nix> { php = php73base; }) rec {
+    version = "2.0.6";
+    pname = "gearman";
+    src = fetchurl {
+      url = "https://github.com/wcgallego/pecl-gearman/archive/${pname}-${version}.tar.gz";
+      sha256 = "0bliga4j41xkvdfh6bqi6k8x6mfxbi5sl9gix97axs7w0ncyfprz";
+    };
+    configureFlags = [ "--with-gearman=${gearmand}" ];
+    nativeBuildInputs = [ gearmand ];
+  };
+in
+(composerEnv.override {
+  php = php73.withExtensions(e: php73.enabledExtensions ++ (with php73.extensions; [gearman redis mbstring bcmath json iconv]));
+}).buildPackage (mylibs.fetchedGithub ./worker.json //
+  import ./worker_php_packages.nix { inherit composerEnv fetchurl; } // rec {
+    postInstall = ''
+      ln -s ${config_file} $out/etc/config.yml
+      '';
+  preInstall = ''
+    cp ${./worker_composer.lock} $out/composer.lock
+    '';
+})
diff --git a/pkgs/status_engine/worker_composer.lock b/pkgs/status_engine/worker_composer.lock
new file mode 100644 (file)
index 0000000..63f2646
--- /dev/null
@@ -0,0 +1,1457 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "0b9940904a72531dd233d2c1b0ea28a0",
+    "packages": [
+        {
+            "name": "crate/crate-dbal",
+            "version": "0.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/crate/crate-dbal.git",
+                "reference": "3329f19d39f648bdd7613e5c8dc7e230f45814d9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/crate/crate-dbal/zipball/3329f19d39f648bdd7613e5c8dc7e230f45814d9",
+                "reference": "3329f19d39f648bdd7613e5c8dc7e230f45814d9",
+                "shasum": ""
+            },
+            "require": {
+                "crate/crate-pdo": "~0.6.0",
+                "doctrine/dbal": "~2.5.5",
+                "php": "~5.5|~7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~1.5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Crate\\DBAL": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "description": "A Doctrine Database Abstraction Layer for the Crate.io DBMS",
+            "homepage": "https://github.com/crate/crate-dbal",
+            "keywords": [
+                "crate",
+                "database",
+                "dbal",
+                "doctrine"
+            ],
+            "time": "2017-04-07T13:26:54+00:00"
+        },
+        {
+            "name": "crate/crate-pdo",
+            "version": "0.6.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/crate/crate-pdo.git",
+                "reference": "31a88d1004235327a4651a10a5b98a7803b3cde3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/crate/crate-pdo/zipball/31a88d1004235327a4651a10a5b98a7803b3cde3",
+                "reference": "31a88d1004235327a4651a10a5b98a7803b3cde3",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pdo": "*",
+                "guzzlehttp/guzzle": "~6.0",
+                "php": "~5.5|~7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~1.5.2"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Crate\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache2"
+            ],
+            "description": "A PDO adapter for interacting with the Crate.io DBMS",
+            "homepage": "https://github.com/crate/crate-pdo",
+            "keywords": [
+                "crate",
+                "database",
+                "pdo"
+            ],
+            "time": "2017-07-17T12:50:03+00:00"
+        },
+        {
+            "name": "doctrine/annotations",
+            "version": "1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/annotations.git",
+                "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d",
+                "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/lexer": "1.*",
+                "ext-tokenizer": "*",
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/cache": "1.*",
+                "phpunit/phpunit": "^7.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "Docblock Annotations Parser",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "parser"
+            ],
+            "time": "2020-05-25T17:24:27+00:00"
+        },
+        {
+            "name": "doctrine/cache",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/cache.git",
+                "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
+                "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
+                "shasum": ""
+            },
+            "require": {
+                "php": "~7.1 || ^8.0"
+            },
+            "conflict": {
+                "doctrine/common": ">2.2,<2.4"
+            },
+            "require-dev": {
+                "alcaeus/mongo-php-adapter": "^1.1",
+                "doctrine/coding-standard": "^6.0",
+                "mongodb/mongodb": "^1.1",
+                "phpunit/phpunit": "^7.0",
+                "predis/predis": "~1.0"
+            },
+            "suggest": {
+                "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.9.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+            "homepage": "https://www.doctrine-project.org/projects/cache.html",
+            "keywords": [
+                "abstraction",
+                "apcu",
+                "cache",
+                "caching",
+                "couchdb",
+                "memcached",
+                "php",
+                "redis",
+                "xcache"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-27T16:24:54+00:00"
+        },
+        {
+            "name": "doctrine/collections",
+            "version": "1.6.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/collections.git",
+                "reference": "fc0206348e17e530d09463fef07ba8968406cd6d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d",
+                "reference": "fc0206348e17e530d09463fef07ba8968406cd6d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1.3 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "phpstan/phpstan-shim": "^0.9.2",
+                "phpunit/phpunit": "^7.0",
+                "vimeo/psalm": "^3.8.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.",
+            "homepage": "https://www.doctrine-project.org/projects/collections.html",
+            "keywords": [
+                "array",
+                "collections",
+                "iterators",
+                "php"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-25T19:24:35+00:00"
+        },
+        {
+            "name": "doctrine/common",
+            "version": "v2.7.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/common.git",
+                "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9",
+                "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/annotations": "1.*",
+                "doctrine/cache": "1.*",
+                "doctrine/collections": "1.*",
+                "doctrine/inflector": "1.*",
+                "doctrine/lexer": "1.*",
+                "php": "~5.6|~7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.7.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\": "lib/Doctrine/Common"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "Common Library for Doctrine projects",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "annotations",
+                "collections",
+                "eventmanager",
+                "persistence",
+                "spl"
+            ],
+            "time": "2017-07-22T08:35:12+00:00"
+        },
+        {
+            "name": "doctrine/dbal",
+            "version": "v2.5.13",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/dbal.git",
+                "reference": "729340d8d1eec8f01bff708e12e449a3415af873"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873",
+                "reference": "729340d8d1eec8f01bff708e12e449a3415af873",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/common": ">=2.4,<2.8-dev",
+                "php": ">=5.3.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*",
+                "symfony/console": "2.*||^3.0"
+            },
+            "suggest": {
+                "symfony/console": "For helpful console commands such as SQL execution and import of files."
+            },
+            "bin": [
+                "bin/doctrine-dbal"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Doctrine\\DBAL\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                }
+            ],
+            "description": "Database Abstraction Layer",
+            "homepage": "http://www.doctrine-project.org",
+            "keywords": [
+                "database",
+                "dbal",
+                "persistence",
+                "queryobject"
+            ],
+            "time": "2017-07-22T20:44:48+00:00"
+        },
+        {
+            "name": "doctrine/inflector",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c",
+                "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^7.0",
+                "phpstan/phpstan": "^0.11",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-strict-rules": "^0.11",
+                "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector",
+                    "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Benjamin Eberlei",
+                    "email": "kontakt@beberlei.de"
+                },
+                {
+                    "name": "Jonathan Wage",
+                    "email": "jonwage@gmail.com"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+            "homepage": "https://www.doctrine-project.org/projects/inflector.html",
+            "keywords": [
+                "inflection",
+                "inflector",
+                "lowercase",
+                "manipulation",
+                "php",
+                "plural",
+                "singular",
+                "strings",
+                "uppercase",
+                "words"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T07:19:59+00:00"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
+                "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "phpstan/phpstan": "^0.11.8",
+                "phpunit/phpunit": "^8.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-25T17:44:05+00:00"
+        },
+        {
+            "name": "guzzlehttp/guzzle",
+            "version": "6.5.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "guzzlehttp/promises": "^1.0",
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+                "psr/log": "^1.1"
+            },
+            "suggest": {
+                "psr/log": "Required for using the Log middleware"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "6.5-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "time": "2020-05-25T19:35:05+00:00"
+        },
+        {
+            "name": "guzzlehttp/promises",
+            "version": "v1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/promises.git",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                }
+            ],
+            "description": "Guzzle promises library",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-12-20T10:07:11+00:00"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "1.6.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0",
+                "psr/http-message": "~1.0",
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+            },
+            "provide": {
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-zlib": "*",
+                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+            },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.6-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "GuzzleHttp\\Psr7\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Tobias Schultze",
+                    "homepage": "https://github.com/Tobion"
+                }
+            ],
+            "description": "PSR-7 message implementation that also provides common utility methods",
+            "keywords": [
+                "http",
+                "message",
+                "psr-7",
+                "request",
+                "response",
+                "stream",
+                "uri",
+                "url"
+            ],
+            "time": "2019-07-01T23:21:34+00:00"
+        },
+        {
+            "name": "php-amqplib/php-amqplib",
+            "version": "v2.11.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-amqplib/php-amqplib.git",
+                "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/6353c5d2d3021a301914bc6566e695c99cfeb742",
+                "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "ext-sockets": "*",
+                "php": ">=5.6.3",
+                "phpseclib/phpseclib": "^2.0.0"
+            },
+            "conflict": {
+                "php": "7.4.0 - 7.4.1"
+            },
+            "replace": {
+                "videlalvaro/php-amqplib": "self.version"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "nategood/httpful": "^0.2.20",
+                "phpunit/phpunit": "^5.7|^6.5|^7.0",
+                "squizlabs/php_codesniffer": "^2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.11-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpAmqpLib\\": "PhpAmqpLib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Alvaro Videla",
+                    "role": "Original Maintainer"
+                },
+                {
+                    "name": "Raúl Araya",
+                    "email": "nubeiro@gmail.com",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Luke Bakken",
+                    "email": "luke@bakken.io",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Ramūnas Dronga",
+                    "email": "github@ramuno.lt",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
+            "homepage": "https://github.com/php-amqplib/php-amqplib/",
+            "keywords": [
+                "message",
+                "queue",
+                "rabbitmq"
+            ],
+            "time": "2020-05-13T13:56:11+00:00"
+        },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "2.0.27",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
+                "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phing/phing": "~2.7",
+                "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
+                "sami/sami": "~2.0",
+                "squizlabs/php_codesniffer": "~2.0"
+            },
+            "suggest": {
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
+                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "phpseclib/bootstrap.php"
+                ],
+                "psr-4": {
+                    "phpseclib\\": "phpseclib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "funding": [
+                {
+                    "url": "https://github.com/terrafrost",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/phpseclib",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-04T23:17:33+00:00"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/ralouphie/getallheaders.git",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/getallheaders.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ralph Khattar",
+                    "email": "ralph.khattar@gmail.com"
+                }
+            ],
+            "description": "A polyfill for getallheaders.",
+            "time": "2019-03-08T08:55:37+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
+                "reference": "d232bfc100dfd32b18ccbcab4bcc8f28697b7e41",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9",
+                "symfony/polyfill-mbstring": "~1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/event-dispatcher": "~2.1|~3.0.0",
+                "symfony/process": "~2.1|~3.0.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "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 Console Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-11-30T12:35:10+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v2.8.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "f79824187de95064a2f5038904c4d7f0227fedb5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5",
+                "reference": "f79824187de95064a2f5038904c4d7f0227fedb5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "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 Yaml Component",
+            "homepage": "https://symfony.com",
+            "time": "2015-11-30T12:35:10+00:00"
+        }
+    ],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.5.9",
+        "ext-redis": "*",
+        "ext-gearman": "*",
+        "ext-mbstring": "*",
+        "ext-bcmath": "*",
+        "ext-json": "*",
+        "ext-iconv": "*"
+    },
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
+}
diff --git a/pkgs/status_engine/worker_php_packages.nix b/pkgs/status_engine/worker_php_packages.nix
new file mode 100644 (file)
index 0000000..1d956ad
--- /dev/null
@@ -0,0 +1,217 @@
+# Generated with composer2nix and adapted to return only the list of
+# packages
+{ composerEnv, fetchurl }:
+{
+  packages = {
+    "crate/crate-dbal" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "crate-crate-dbal-3329f19d39f648bdd7613e5c8dc7e230f45814d9";
+        src = fetchurl {
+          url = https://api.github.com/repos/crate/crate-dbal/zipball/3329f19d39f648bdd7613e5c8dc7e230f45814d9;
+          sha256 = "013z63zcvrnmxphdm6qqy0if1397lmbb0g3yrpjbka98pg8zm99g";
+        };
+      };
+    };
+    "crate/crate-pdo" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "crate-crate-pdo-31a88d1004235327a4651a10a5b98a7803b3cde3";
+        src = fetchurl {
+          url = https://api.github.com/repos/crate/crate-pdo/zipball/31a88d1004235327a4651a10a5b98a7803b3cde3;
+          sha256 = "194f6daj9ghlwyplp86nazh1av6jadqznwqijqgr1g3dfmgb3y16";
+        };
+      };
+    };
+    "doctrine/annotations" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-annotations-5db60a4969eba0e0c197a19c077780aadbc43c5d";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d;
+          sha256 = "1a8psmvs90x4nflfvjvp6j9yjmq6z9jgsb3plrp5c7iy7snkq1v2";
+        };
+      };
+    };
+    "doctrine/cache" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-cache-35a4a70cd94e09e2259dfae7488afc6b474ecbd3";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3;
+          sha256 = "1fk0c8vhjgl7j4b2vd4k7sshdrqysqwcp9mlxbapf8x7nmpa6i9b";
+        };
+      };
+    };
+    "doctrine/collections" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-collections-fc0206348e17e530d09463fef07ba8968406cd6d";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d;
+          sha256 = "1aqnjna5cc5hyy6wypmayvl5lgz2qbym6innmr3qaq9nff6r9qlf";
+        };
+      };
+    };
+    "doctrine/common" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-common-4acb8f89626baafede6ee5475bc5844096eba8a9";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9;
+          sha256 = "0qjqframvg81z3lwqaj5haanqj9v3dfbj170pxmwlgmrfsbr16zh";
+        };
+      };
+    };
+    "doctrine/dbal" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-dbal-729340d8d1eec8f01bff708e12e449a3415af873";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873;
+          sha256 = "184p8h0n6mcm0y6vfyh0z6qcxmmf8h5z4vdvxd4ycmx0531lnhj3";
+        };
+      };
+    };
+    "doctrine/inflector" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-inflector-4650c8b30c753a76bf44fb2ed00117d6f367490c";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c;
+          sha256 = "13jnzwpzz63i6zipmhb22lv35l5gq6wmji0532c94331wcq5bvv9";
+        };
+      };
+    };
+    "doctrine/lexer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-lexer-e864bbf5904cb8f5bb334f99209b48018522f042";
+        src = fetchurl {
+          url = https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042;
+          sha256 = "11lg9fcy0crb8inklajhx3kyffdbx7xzdj8kwl21xsgq9nm9iwvv";
+        };
+      };
+    };
+    "guzzlehttp/guzzle" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-guzzle-a4a1b6930528a8f7ee03518e6442ec7a44155d9d";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d;
+          sha256 = "0midln6ji6b990vkc0syn631nf6r94lv5600dcc26lcivz8c4gk3";
+        };
+      };
+    };
+    "guzzlehttp/promises" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-promises-a59da6cf61d80060647ff4d3eb2c03a2bc694646";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646;
+          sha256 = "1kpl91fzalcgkcs16lpakvzcnbkry3id4ynx6xhq477p4fipdciz";
+        };
+      };
+    };
+    "guzzlehttp/psr7" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-psr7-239400de7a173fe9901b9ac7c06497751f00727a";
+        src = fetchurl {
+          url = https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a;
+          sha256 = "0mfq93x7ayix6l3v5jkk40a9hnmrxaqr9vk1r26q39d1s6292ma7";
+        };
+      };
+    };
+    "php-amqplib/php-amqplib" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-amqplib-php-amqplib-6353c5d2d3021a301914bc6566e695c99cfeb742";
+        src = fetchurl {
+          url = https://api.github.com/repos/php-amqplib/php-amqplib/zipball/6353c5d2d3021a301914bc6566e695c99cfeb742;
+          sha256 = "1nadc5afkn1fiws2w1wh0n032pr5b4dzfg1dcqyf2jnh0nsgq0xp";
+        };
+      };
+    };
+    "phpseclib/phpseclib" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpseclib-phpseclib-34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc";
+        src = fetchurl {
+          url = https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc;
+          sha256 = "1jlc8plx0v0rq3zqhc19a01r7xx7a2p6gl7mkzf2hn0kss50plz5";
+        };
+      };
+    };
+    "psr/http-message" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363";
+        src = fetchurl {
+          url = https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363;
+          sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45";
+        };
+      };
+    };
+    "ralouphie/getallheaders" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822";
+        src = fetchurl {
+          url = https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822;
+          sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg";
+        };
+      };
+    };
+    "symfony/console" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-console-d232bfc100dfd32b18ccbcab4bcc8f28697b7e41";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/console/zipball/d232bfc100dfd32b18ccbcab4bcc8f28697b7e41;
+          sha256 = "16kgs7x60y3vj0bbmljj80hq1x8fb6w1g0fd1j2hc1cbphgj8x67";
+        };
+      };
+    };
+    "symfony/polyfill-intl-idn" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-intl-idn-3bff59ea7047e925be6b7f2059d60af31bb46d6a";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a;
+          sha256 = "0c26v3xpchyiqckp663n7i3hgswbzy56r0jdwjizrsgqq731h6fp";
+        };
+      };
+    };
+    "symfony/polyfill-mbstring" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-mbstring-fa79b11539418b02fc5e1897267673ba2c19419c";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c;
+          sha256 = "17m46mkkcv7fsxf71si0cq8xdf6b1k272mc5bfwgl00h8s9bk0rs";
+        };
+      };
+    };
+    "symfony/polyfill-php72" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-php72-f048e612a3905f34931127360bdd2def19a5e582";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582;
+          sha256 = "1lkjxh17nfaglh7v2m3zw2fy6b2w8nmxr7jb1gqqpvg74yqqz83f";
+        };
+      };
+    };
+    "symfony/yaml" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-yaml-f79824187de95064a2f5038904c4d7f0227fedb5";
+        src = fetchurl {
+          url = https://api.github.com/repos/symfony/yaml/zipball/f79824187de95064a2f5038904c4d7f0227fedb5;
+          sha256 = "1pwx4bckfjz0afz62q02vl0i4wmg3c6f963jrhlx247b1z6isram";
+        };
+      };
+    };
+  };
+}