test(services): testing remove restart and stop

This commit is contained in:
2025-04-02 21:24:23 -05:00
parent b2683d0429
commit 3355eb389c
7 changed files with 162 additions and 56 deletions

View File

@@ -125,7 +125,9 @@ export default function ServerPage() {
token={token as string} token={token as string}
/> />
<StartServer /> <StartServer />
<StopServer /> <StopServer
plantData={server}
/>
<RestartServer /> <RestartServer />
</div> </div>
)} )}

View File

@@ -1,14 +1,46 @@
import {Button} from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip"; import {
import {Octagon} from "lucide-react"; Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import axios from "axios";
import { Octagon } from "lucide-react";
export default function StopServer() { export default function StopServer(plantData: any) {
const token = localStorage.getItem("auth_token");
const handleStopServer = async (plant: string) => {
let data: any = {
processType: "stop",
plantToken: plant,
};
const url: string = window.location.host.split(":")[0];
if (url === "localhost") {
data = { ...data, remote: "true" };
}
try {
const res = await axios.post("/api/server/serviceprocess", data, {
headers: { Authorization: `Bearer ${token}` },
});
console.log(res);
} catch (error) {
console.log(error);
}
};
return ( return (
<div> <div>
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
<Button variant={"outline"} size={"icon"}> <Button
variant="destructive"
size={"icon"}
onClick={() =>
handleStopServer(plantData.plantToken)
}
>
<Octagon /> <Octagon />
</Button> </Button>
</TooltipTrigger> </TooltipTrigger>

View File

@@ -1,23 +1,34 @@
import {Button} from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import {CircleFadingArrowUp} from "lucide-react"; import { CircleFadingArrowUp } from "lucide-react";
import {toast} from "sonner"; import { toast } from "sonner";
import {Servers} from "./ServerPage"; import { Servers } from "./ServerPage";
import {useQuery} from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import {getSettings} from "@/utils/querys/settings"; import { getSettings } from "@/utils/querys/settings";
import axios from "axios"; import axios from "axios";
import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip"; import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
export default function UpdateServer({server, token}: {server: Servers; token: string}) { export default function UpdateServer({
const {data} = useQuery(getSettings(token ?? "")); server,
token,
}: {
server: Servers;
token: string;
}) {
const { data } = useQuery(getSettings(token ?? ""));
const upgrade = async () => { const upgrade = async () => {
let devDir = data.filter((n: any) => n.name === "devDir"); let devDir = data.filter((n: any) => n.name === "devDir");
toast.success("Server being upgraded in the background please wait."); toast.success("Server being upgraded in the background please wait.");
try { try {
const result = await axios.post( const result = await axios.post(
`/api/server/update/${server.plantToken}`, `/api/server/update/${server.plantToken}`,
{devDir: devDir[0].value}, { devDir: devDir[0].value },
{ {
headers: {Authorization: `Bearer ${token}`}, headers: { Authorization: `Bearer ${token}` },
} }
); );
@@ -29,7 +40,9 @@ export default function UpdateServer({server, token}: {server: Servers; token: s
toast.success(result.data.message); toast.success(result.data.message);
} }
} catch (error: any) { } catch (error: any) {
toast.error(`There was an error updating the server: ${error.data.message}`); toast.error(
`There was an error updating the server: ${error.data.message}`
);
} }
}; };
return ( return (
@@ -37,7 +50,12 @@ export default function UpdateServer({server, token}: {server: Servers; token: s
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
<Button variant={"outline"} size={"icon"} onClick={upgrade} disabled={server.isUpgrading}> <Button
variant={`${server.isUpgrading ? "ghost" : "outline"}`}
size={"icon"}
onClick={upgrade}
disabled={server.isUpgrading}
>
<CircleFadingArrowUp /> <CircleFadingArrowUp />
</Button> </Button>
</TooltipTrigger> </TooltipTrigger>

View File

@@ -4,22 +4,22 @@
### To run the server ### To run the server
- [PostgresSQL](https://www.postgresql.org/download/windows/) - current version using is 17 - [PostgresSQL](https://www.postgresql.org/download/windows/) - current version using is 17
- [NodeJS](https://nodejs.org) - [NodeJS](https://nodejs.org)
- [NSSM](https://nssm.cc/) - [NSSM](https://nssm.cc/)
### To manage the server ### To manage the server
- [VSCODE](https://code.visualstudio.com/) - [VSCODE](https://code.visualstudio.com/)
- [Postman](https://www.postman.com/downloads/) - [Postman](https://www.postman.com/downloads/)
## Creating directories needed ## Creating directories needed
- Create a new folder where we will host the server files. - Create a new folder where we will host the server files.
- Copy the nssm.exe into this folder - Copy the nssm.exe into this folder
- Copy the build files to the server (only needed for intial install). - Copy the build files to the server (only needed for intial install).
- This will house all the compiles and minified files needed to start the server up, this includes the frontend. - This will house all the compiles and minified files needed to start the server up, this includes the frontend.
- Save the nssm.exe into this folder as well, this will be used to control the service. - Save the nssm.exe into this folder as well, this will be used to control the service.
## Do the intial install ## Do the intial install
@@ -53,14 +53,12 @@ add in the below and change each setting area that says change me to something t
```env ```env
# PORTS # PORTS
PROD_PORT=4000
# To keep it all simple we will pass VITE to the ports that are used on both sides. # To keep it all simple we will pass VITE to the ports that are used on both sides.
VITE_SERVER_PORT=4400 VITE_SERVER_PORT=4000
# logLevel # logLevel
LOG_LEVEL=debug LOG_LEVEL=info
PROD_PORT=4000
# DUE to lstv1 we need 3000
SEC_PORT=3000
# Auth stuff # Auth stuff
SALTING=12 SALTING=12
SECRET=CHANGEME SECRET=CHANGEME
@@ -94,15 +92,15 @@ npm start
This command will start up the server and seed the database. This command will start up the server and seed the database.
- Settings will be set here. - Settings will be set here.
- All modules will be added. - All modules will be added.
2. Press CTRL + C to stop the server. 2. Press CTRL + C to stop the server.
3. Reopen postgres and review the settings make the changes to match the server your going to be running in. 3. Reopen postgres and review the settings make the changes to match the server your going to be running in.
- Change the server - Change the server
- change the dbServer - change the dbServer
- change plantToken - change plantToken
- then the remaining settings confirm if you need on or want to leave as default. - then the remaining settings confirm if you need on or want to leave as default.
### Creating first user. ### Creating first user.
@@ -113,8 +111,8 @@ npm start
``` ```
2. Open http://[SERVER]:[PORT]/api/docs or postman and create a user. 2. Open http://[SERVER]:[PORT]/api/docs or postman and create a user.
- Please do not try to manually enter a new user this is due to how the password is hashed, as well as setting systemAdmin for the first user. - Please do not try to manually enter a new user this is due to how the password is hashed, as well as setting systemAdmin for the first user.
- Change the server and port to what you changed in the DB. - Change the server and port to what you changed in the DB.
3. Stop the server again with CTRL + C. 3. Stop the server again with CTRL + C.
### Running as a serivice. ### Running as a serivice.
@@ -127,28 +125,58 @@ cd .\dist\server\scripts\
Next use the example command below to get the service up and running. Next use the example command below to get the service up and running.
- Options legend - Options legend
- serviceName = not recommended to change to reduce issues with the update process - serviceName = not recommended to change to reduce issues with the update process
- option = use install for the install, but you can use this script later to stop, start, restart the service. - option = use install for the install, but you can use this script later to stop, start, restart the service.
- appPath = where did you extract the server files - appPath = where did you extract the server files
- description = no need to change this unless you want it to be something else - description = no need to change this unless you want it to be something else
- command = do not change this unless you know what your doing and really need to change this. - command = do not change this unless you know what your doing and really need to change this.
```powershell ```powershell
.\services.ps1 -serviceName "LSTV2" -option "install" -appPath "E:\LST\lstV2" -description "Logistics Support Tool V2" -command "run start" .\services.ps1 -serviceName "LSTV2" -option "install" -appPath "E:\LST\lstV2" -description "Logistics Support Tool V2" -command "run start"
``` ```
### Adding servers to the mix to update on from the front end
you will need to add your servers into the serverData.json.
when the server starts up it will look at this file and make changes as needed.
below is an example of the server
```JSON
{
"sName": "Kansas City",
"serverDNS": "usksc1vms006",
"plantToken": "usksc1",
"idAddress": "10.42.9.26",
"greatPlainsPlantCode": "85",
"streetAddress": "1800 E 94th St Suite 300",
"cityState": "Kansas City, MO",
"zipcode": "64131",
"contactEmail": "example@example.com",
"contactPhone": "555-555-5555",
"customerTiAcc": "ALPL01KCINT",
"lstServerPort": "4000",
"active": false,
"serverLoc": "E:\\LST\\lstv2",
"oldVersion": "E:\\LST\\lst_backend",
"shippingHours": "[{\"early\": \"06:30\", \"late\": \"23:00\"}]",
"tiPostTime": "[{\"from\": \"24\", \"to\": \"24\"}]",
"otherSettings": [{ "specialInstructions": "" }]
}
```
# Migrating From V1 to V2 # Migrating From V1 to V2
## User migration ## User migration
1. Open the sqlite db and export to sql the users table 1. Open the sqlite db and export to sql the users table
2. OPen the sql in notepad++ or your editor of choice and change the query to be similar to below. 2. OPen the sql in notepad++ or your editor of choice and change the query to be similar to below.
- we only need to have save the username, role, email, password - we only need to have save the username, role, email, password
An example new query will look like An example new query will look like
- Below is how it looks when exported from sqlite - Below is how it looks when exported from sqlite
```sql ```sql
INSERT INTO "User" ("id", "username", "email", "role", "password", "passwordToken", "tokenExpire", "active", "pinCode", "lastLogin", "add_user", "add_date", "upd_user", "upd_date") VALUES INSERT INTO "User" ("id", "username", "email", "role", "password", "passwordToken", "tokenExpire", "active", "pinCode", "lastLogin", "add_user", "add_date", "upd_user", "upd_date") VALUES
@@ -157,7 +185,7 @@ INSERT INTO "User" ("id", "username", "email", "role", "password", "passwordToke
The way we want to put recreate the query to work with the new db The way we want to put recreate the query to work with the new db
- Below example - Below example
```sql ```sql
INSERT INTO "users" ("username", "email", "role", "password") VALUES INSERT INTO "users" ("username", "email", "role", "password") VALUES
@@ -167,11 +195,11 @@ INSERT INTO "users" ("username", "email", "role", "password") VALUES
; ;
``` ```
- You could have many users and just add like above with the identical info from the db - You could have many users and just add like above with the identical info from the db
## Running v1 along Side V2 for the interm ## Running v1 along Side V2 for the interm
- change v2 prod port to 4000 in the env and db - change v2 prod port to 4000 in the env and db
- change v1 env to 4400 in the env. and in the db you will need to change the auth server to 4000 and the serverPort to 4400 - change v1 env to 4400 in the env. and in the db you will need to change the auth server to 4000 and the serverPort to 4400
This will change so that v2 is the main server now, this is needed for ocme mainly. This will change so that v2 is the main server now, this is needed for ocme mainly.

View File

@@ -4,6 +4,7 @@ param (
[string]$appPath, [string]$appPath,
[string]$command, # just the command like run startadm or what ever you have in npm. [string]$command, # just the command like run startadm or what ever you have in npm.
[string]$description [string]$description
[string]$remote
) )
# Example string to run with the parameters in it. # Example string to run with the parameters in it.
@@ -24,6 +25,16 @@ param (
$nssmPath = $AppPath + "\nssm.exe" $nssmPath = $AppPath + "\nssm.exe"
$npmPath = "C:\Program Files\nodejs\npm.cmd" # Path to npm.cmd $npmPath = "C:\Program Files\nodejs\npm.cmd" # Path to npm.cmd
if($remote -eq "true"){
$plantFunness = {
param ($service, $processType, $location)
# Call your PowerShell script inside plantFunness
& "$($location)\dist\server\scripts\services.ps1" -serviceName $service -option $processType -appPath $location
}
Invoke-Command -ComputerName $server -ScriptBlock $plantFunness -ArgumentList $service, $option, $appPath -Credential $credentials
}
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Host "Error: This script must be run as Administrator." Write-Host "Error: This script must be run as Administrator."
exit 1 exit 1

View File

@@ -132,6 +132,17 @@ $plantFunness = {
exit 1 # Exit with a non-zero code if there's an error exit 1 # Exit with a non-zero code if there's an error
} }
# for iowa 2 need to change the port config on the start up of nextjs server
if($token -eq "usiow2"){
$jsonPkgloc = "$($obslst)\apps\frontend\package.json"
#read the file
$jsonContent = Get-Content -Path $jsonPkgloc | ConvertFrom-Json
#change the second we want to update
$jsonContent.scripts.start = "next start -p 3001"
# convert back to json
$jsonContent | ConvertTo-Json | Set-Content -Path $jsonPkgloc
}
############################################################################ ############################################################################
Write-Host "Stopping the services to do the updates, pkgs and db changes." Write-Host "Stopping the services to do the updates, pkgs and db changes."

View File

@@ -15,6 +15,10 @@
"esModuleInterop": true, "esModuleInterop": true,
"resolveJsonModule": true "resolveJsonModule": true
}, },
"include": ["server", "scripts/**/*.ts", "testFiles/test-tiPostOrders.ts"], "include": [
"exclude": ["node_modules", "frontend", "dist", "testFiles"] "server",
"scripts/**/*.ts",
"database/testFiles/test-tiPostOrders.ts"
],
"exclude": ["node_modules", "frontend", "dist", "database/testFiles"]
} }