From 317ee76c3e05c28cc8af1710dc40945761cdd8ae Mon Sep 17 00:00:00 2001 From: "CHIEFSOFT\\ameye" Date: Tue, 19 May 2026 12:41:57 -0400 Subject: [PATCH] Provision Socket Calls --- app/Controllers/Provision.php | 144 +++++++++------------------------- 1 file changed, 37 insertions(+), 107 deletions(-) diff --git a/app/Controllers/Provision.php b/app/Controllers/Provision.php index 3735ba0..79abefc 100644 --- a/app/Controllers/Provision.php +++ b/app/Controllers/Provision.php @@ -188,7 +188,7 @@ class Provision extends BaseController $this->registerProvision($subscriptionId, $prov_name); - $this->provisionActions($memberID, $subscriptionUId, "Auto Configuration Started"); + $this->create_provision_action($memberID, $subscriptionUId, "Auto Configuration Started", false); } return 0; } @@ -436,8 +436,8 @@ class Provision extends BaseController $provision_list = $query->getResult(); //$provision_list =[]; foreach ($provision_list as $pr) { - $this->db->query("UPDATE member_product_refresh SET status = status + 1 WHERE id = " . $pr->id); $subscriptionUId = $pr->subscription_uid; + $this->db->query("UPDATE member_product_refresh SET status = status + 1 WHERE id = " . $pr->id); $this->auditProvisionPlans($subscriptionUId); if ($this->refreshProvision($subscriptionUId) == 100) { log_message('critical', "***** ***** scheduleRefreshAction Started:: () "); @@ -523,7 +523,7 @@ class Provision extends BaseController $members_product_id = $pr->mpid; - $this->provisionActions($member_id, $subscriptionUId, "Rebuilding Provision Started "); + $this->create_provision_action($member_id, $subscriptionUId, "Rebuilding Provision Started "); log_message('critical', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status); @@ -548,7 +548,7 @@ class Provision extends BaseController } // make sure we compose the docker compose to use - $this->prepareDockerComposer( + $this->prepare_provision_docker_composer( $members_product_id, $provision_port, $productId, @@ -581,17 +581,17 @@ class Provision extends BaseController log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn); if ($ansibleReturn === 200) { log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn); - $this->update_To_Completed($productUid); + $this->update_provision_to_completed($productUid); } else { log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn); - $this->update_To_Completed($productUid); + $this->update_provision_to_completed($productUid); } - $this->provisionActions($member_id, $subscriptionUId, "Rebuilding Provision Completed "); + $this->create_provision_action($member_id, $subscriptionUId, "Rebuilding Provision Completed", true); } return 100; } - private function prepareDockerComposer( + private function prepare_provision_docker_composer( $members_product_id, $members_product_port, $product_id, @@ -638,74 +638,20 @@ class Provision extends BaseController $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; $composer_template_contents = file_get_contents($composer_template_path); // Do the processing -// $composer_template_contents = str_replace("WHAT_CONTAINER_NAME", $ContainerName, $composer_template_contents); -// //$destinationHomeFolder = "/home/chiefsoft/SITES/" . $ContainerName; -// $SITE_CONTENTS_GATEWAY = $_ENV['SITE_CONTENTS_GATEWAY']; -// $SITE_CONTACT_GATEWAY = $_ENV['SITE_CONTACT_GATEWAY']; -// $MYSQL_PROVISION_DATABASE_PORT = $_ENV['PROVISION_MSQL_DATABASE_IP'] . ":" . $_ENV['PROVISION_MSQL_DATABASE_PORT']; // "172.16.4.96:3307"; -// $destinationHomeFolder = $_ENV['DESTINATION_HOME_FOLDER'] . $ContainerName; -// $composer_template_contents = str_replace("DESTINATION_FOLDER", $destinationHomeFolder, $composer_template_contents); -// $composer_template_contents = str_replace("ALLOCATED_PORT", $allocatedPort, $composer_template_contents); -// $composer_template_contents = str_replace("CNT_DB_NAME", $ContainerName, $composer_template_contents); -// $composer_template_contents = str_replace("CNT_DB_PASS", $provisionUID, $composer_template_contents); -// $composer_template_contents = str_replace("CNT_DB_DATA", $MYSQL_PROVISION_DATABASE_PORT, $composer_template_contents); -// $composer_template_contents = str_replace("PROVISION_UID_REPLACE", $provisionUID, $composer_template_contents); -// $composer_template_contents = str_replace("PROVISION_IMAGE_NAME_REPLACE", "registry.chiefsoft.com/pweb/pweb-01-merms-pweb0006c:latest", $composer_template_contents); -// $composer_template_contents = str_replace("SITE_CONTENTS_URL_REPLACE", $SITE_CONTENTS_GATEWAY, $composer_template_contents); -// $composer_template_contents = str_replace("SITE_CONTACT_URL_REPLACE", $SITE_CONTACT_GATEWAY, $composer_template_contents); -// -// -// $templateRandom = 'P' . rand(1, 6); -// $composer_template_contents = str_replace("TEMPLATE_NAME_REPLACE", $templateRandom, $composer_template_contents); -// $composer_template_contents = $this->prepareTemplateFile($composer_template_contents, $ContainerName, $allocatedPort, $provisionUID, $ansible_folder, $productId, $internal_url, $members_product_id); - - //Save to the specific path -// $composerFile = fopen($destination_composer_path, "w") or die("Unable to open file!"); -// fwrite($composerFile, $composer_template_contents); -// fclose($composerFile); - - // GET THE TEMPLATE FOR THIS PROVISIONING - /* - $template_content = file_get_contents($template_file); - $template_content_processed = str_replace("WHAT_HOST_IN_USE", $productId . "_SERVER", $template_content); - $template_content_processed = str_replace("WHAT_PART_FOLDER", $partFolder, $template_content_processed); - $template_content_processed = str_replace("DESTINATION_FOLDER", $destinationHomeFolder, $template_content_processed); - $template_content_processed = str_replace("WHAT_PART_LOCAL", $composer_template_path_local, $template_content_processed); // depends on the local machine - // CREATE PROVISOINING FILE - $myfile = fopen($ansible_folder . "/" . $prov_name, "w") or die("Unable to open file!"); - fwrite($myfile, $template_content_processed); - fclose($myfile); - */ } - private function registerProvision($subscriptionId, $prov_name): int + private function registerProvision($subscriptionId, $prov_name): void { - - /* - CREATE TABLE provision_plans ( - id SERIAL, - uid uuid DEFAULT uuid_generate_v4(), - provision_id INT REFERENCES members_products(id), - play_file VARCHAR(100)UNIQUE NOT NULL, - msg VARCHAR(100) , - added timestamp without time zone DEFAULT now(), - updated timestamp without time zone DEFAULT now() - ); - ALTER TABLE ONLY provision_plans - ADD CONSTRAINT provision_plans_id_key UNIQUE (id); - - */ try { $mysql = "INSERT INTO provision_plans (provision_id,play_file) VALUES($subscriptionId,'$prov_name')"; $query = $this->db->query($mysql); } catch (\Exception $e) { log_message('critical', "***** ***** registerProvision Error:: registerProvision() " . $e->getMessage()); } - return 0; } - private function allocatePortNo() + private function allocatePortNo(): void { $list_limit = 2; $mysql = "SELECT id, member_id, uid, internal_url,product_id,status,provision_port,updated @@ -725,7 +671,7 @@ class Provision extends BaseController $mysql = "UPDATE members_products SET updated=now(), provision_port=" . $allocated_port . ", primary_server='" . $primary_server . "' WHERE uid::TEXT = '" . $provisionUID . "' AND provision_port = 0"; $query = $this->db->query($mysql); - $this->provisionActions($memberID, $provisionUID, "Allocating Provisioning Ports"); + $this->create_provision_action($memberID, $provisionUID, "Allocating Provisioning Ports"); } //Now let us try fix hanging stuffs @@ -841,12 +787,26 @@ class Provision extends BaseController } } - private function provisionActions($memberID, $provisionUID, $actionText): int + private function create_provision_action($memberID, $provisionUID, $actionText, $completedAction = false): void { log_message('critical', "***** ***** Provision :: provisionActions($memberID, $provisionUID,$actionText) "); try { - $mysql = "INSERT INTO provision_actions (member_id,product_uid,action) VALUES ($memberID,'$provisionUID','$actionText')"; - log_message('critical', "***** ***** Provision :: provisionActions(QUERY) :: " . $mysql); + if ($completedAction) { + $percent_completed = 100; + } else { + $percent_completed = 10; + $mysql_find = "SELECT * FROM provision_actions WHERE product_uid = '$provisionUID' ORDER BY id DESC limit 1"; + $query_find = $this->db->query($mysql_find); + $row = $query_find->getResult(); + + if (count($row) > 0) { + $percent_completed = $row['percent_completed']; + $percent_completed = $percent_completed + 10; + } + } + if ($percent_completed > 100) $percent_completed = 1000; + $mysql = "INSERT INTO provision_actions (member_id,product_uid,action ,percent_completed) VALUES ($memberID,'$provisionUID','$actionText', $percent_completed)"; + log_message('info', "***** ***** Provision :: provisionActions(QUERY) :: " . $mysql); $query = $this->db->query($mysql); // TELL THE SOCKET TO REFRESH PAGE @@ -854,26 +814,17 @@ class Provision extends BaseController $data["provision_action"] = urlencode($actionText); $SOCKET_SERVER_LOCATION = $_ENV['SOCKET_SERVER_LOCATION']; - log_message('critical', "***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning'); + log_message('info', "***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning'); $this->APIcall("GET", $SOCKET_SERVER_LOCATION . '/broadcast/provisioning', $data); } catch (\Exception $e) { log_message('critical', "***** ***** Provision Error:: provisionActions() " . $e->getMessage()); } - return 0; } - /* - // $data["product_uid"] = "bea86662-adb3-4c09-816b-014f450d9713"; // 3cc24fd6-e6c7-4c08-8a64-f06e3f790f38 - $data["product_uid"] = "3cc24fd6-e6c7-4c08-8a64-f06e3f790f38"; // - $data["provision_action"] = "Auto%20Configuration%20Started"; - $SOCKET_SERVER_LOCATION = $_ENV['SOCKET_SERVER_LOCATION']; - log_message('critical', "TEST TEST ***** ***** Provision :: Action To :: " . $SOCKET_SERVER_LOCATION . '/broadcast/provisioning'); - $this->APIcall("GET", $SOCKET_SERVER_LOCATION . '/broadcast/provisioning', $data); - */ - public function releaseProvision() + public function releaseProvision(): int { - log_message('critical', "***** ***** ReleaseProvision :: Execute Actual Provisioning() "); + log_message('info', "***** ***** ReleaseProvision :: Execute Actual Provisioning() "); $PROCESS_LIMIT = 2; $rsyncPass = "******noNEDD****"; // $remote_composer_path = "chiefsoft@10.0.0.32:/home/chiefsoft/MermsProvision/ANSIBLE/parts/"; @@ -908,7 +859,7 @@ class Provision extends BaseController $provision_port = $pr->provision_port; $members_product_id = $pr->mpid; - log_message('critical', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status); + log_message('info', "Members Product ID ***** " . $pr->mpid . " Provision_Status == " . $pr->provision_status); $this->updateToNow($productUid); // increase count not to repeat $ansible_host = $productId . "_SERVER"; @@ -935,7 +886,7 @@ class Provision extends BaseController } // make sure we compose the docker compose to use - $this->prepareDockerComposer( + $this->prepare_provision_docker_composer( $members_product_id, $provision_port, $productId, @@ -967,16 +918,16 @@ class Provision extends BaseController log_message('critical', "ANSIBLE RETURN ***** " . $ansibleReturn); if ($ansibleReturn === 200) { log_message('critical', "Calling update_To_Completed ***** " . $ansibleReturn); - $this->update_To_Completed($productUid); + $this->update_provision_to_completed($productUid); } else { log_message('critical', "Calling WHY PATH update_To_Completed ***** " . $ansibleReturn); - $this->update_To_Completed($productUid); + $this->update_provision_to_completed($productUid); } } return 0; } - private function update_To_Completed($provisionUID) + private function update_provision_to_completed($provisionUID): void { log_message('critical', "update_To_Completed ******** ***** " . $provisionUID); try { @@ -993,27 +944,8 @@ class Provision extends BaseController } } -// public function runAnsibleShell($provisionFile){ -// try{ -// log_message('critical', "***** ***** Provision :: runAnsibleShell($provisionFile) "); -// $shellCommand ="/var/www/html/ANSIBLE/auto_play.sh A000001.yml OLU AMEYE "; ///var/www/html/ANSIBLE/$provisionFile"; -// log_message('critical', $shellCommand); -// $output = shell_exec($shellCommand ); -// log_message('critical', "***** ***** Provision :: runAnsibleShell(output) AFTER SHELL RUN ".serialize($output)); -// -//// $shellCommand ="ansible-playbook --vault-password-file /var/www/html/ANSIBLE/secrets.pass --key-file ~/.ssh/ansible_worker -i /var/www/html/ANSIBLE/inventory $provisionFile"; -//// log_message('critical', $shellCommand); -//// -//// $output = shell_exec($shellCommand ); -//// $output = shell_exec($shellCommand ); -//// log_message('critical', "***** ***** Provision :: runAnsibleShell(output) AFTER SHELL RUN ".$output); -// } catch ( \Exception $e){ -// log_message('critical', "***** ***** Provision Error:: runAnsibleShell() ".$e->getMessage()); -// } -// return 0; -// } - public function directProvision() + public function directProvision(): int { $mysql = "SELECT id AS plan_id, uid, provision_id, play_file from provision_plans ORDER BY updated ASC LIMIT 1 "; @@ -1038,8 +970,6 @@ class Provision extends BaseController log_message('critical', "***** ***** Provision Error:: runAnsibleShell() " . $e->getMessage()); } } - - return 0; }