@powerhousedao/ph-cli 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,35 @@
1
1
  import { Argument } from 'commander';
2
- import { execSync } from 'node:child_process';
2
+ import pm2 from 'pm2';
3
+ import { getConfig } from '@powerhousedao/config/powerhouse';
3
4
 
4
5
  const actions = ["start", "stop", "status", "list", "install", "save"];
5
6
  const services = ["reactor", "connect", "all"];
7
+ let reactorPort = 8442;
8
+ let connectPort = 8443;
6
9
  const manageService = async (action, service) => {
7
- if (action === "install") {
8
- const result = execSync(`pm2 startup | tail -n 1`);
9
- const result2 = execSync(result.toString());
10
- console.log(result2.toString());
11
- return;
12
- } else {
13
- const app = service !== "all" ? `--only ${service}` : "";
14
- const response = execSync(
15
- `pm2 ${action} ${["start", "stop", "list"].includes(action) ? `powerhouse-services.config.json ${app}` : ""}`
16
- );
17
- execSync(`pm2 save`);
18
- console.log(response.toString());
10
+ try {
11
+ const config = getConfig();
12
+ if (config.reactor?.port) {
13
+ reactorPort = config.reactor.port;
14
+ }
15
+ if (config.studio?.port) {
16
+ connectPort = config.studio.port;
17
+ }
18
+ pm2.connect((err) => {
19
+ switch (action) {
20
+ case "start":
21
+ startServices(service);
22
+ break;
23
+ case "stop":
24
+ stopServices(service);
25
+ break;
26
+ case "status":
27
+ statusServices();
28
+ break;
29
+ }
30
+ });
31
+ } catch (error) {
32
+ console.error(error);
19
33
  }
20
34
  };
21
35
  function serviceCommand(program) {
@@ -23,6 +37,81 @@ function serviceCommand(program) {
23
37
  new Argument("service").choices(services).argOptional().default("all")
24
38
  ).action(manageService);
25
39
  }
40
+ function startServices(service) {
41
+ if (service === "reactor" || service === "all") {
42
+ const reactorOptions = {
43
+ name: "reactor",
44
+ script: "npx ph-cli reactor"
45
+ };
46
+ console.log("Starting reactor...");
47
+ pm2.start(reactorOptions, (err) => {
48
+ if (err) {
49
+ console.log(err.name);
50
+ }
51
+ dumpServices();
52
+ });
53
+ console.log("Reactor started");
54
+ }
55
+ if (service === "connect" || service === "all") {
56
+ const connectOptions = {
57
+ name: "connect",
58
+ script: "npx ph-cli connect",
59
+ args: ["--port", connectPort.toString()]
60
+ };
61
+ console.log("Starting connect...");
62
+ pm2.start(connectOptions, (err) => {
63
+ if (err) {
64
+ throw new Error(err.message);
65
+ }
66
+ dumpServices();
67
+ });
68
+ console.log("Connect started");
69
+ }
70
+ }
71
+ function dumpServices() {
72
+ pm2.dump((err) => {
73
+ if (err) {
74
+ throw new Error(err.message);
75
+ }
76
+ statusServices();
77
+ });
78
+ }
79
+ function stopServices(service) {
80
+ if (service === "all" || service === "connect") {
81
+ pm2.stop("connect", (err) => {
82
+ if (err) {
83
+ throw new Error(err.message);
84
+ }
85
+ dumpServices();
86
+ });
87
+ }
88
+ if (service === "all" || service === "reactor") {
89
+ pm2.stop("reactor", (err) => {
90
+ if (err) {
91
+ throw new Error(err.message);
92
+ }
93
+ dumpServices();
94
+ });
95
+ }
96
+ }
97
+ function statusServices() {
98
+ pm2.list((err, list) => {
99
+ const formattedList = list.map((item) => {
100
+ return {
101
+ id: item.pm_id,
102
+ name: item.name,
103
+ pid: item.pid,
104
+ uptime: item.pm2_env?.pm_uptime,
105
+ restarts: item.pm2_env?.unstable_restarts,
106
+ status: item.pm2_env?.status,
107
+ mem: item.monit?.memory,
108
+ cpu: item.monit?.cpu
109
+ };
110
+ });
111
+ console.table(formattedList);
112
+ process.exit(0);
113
+ });
114
+ }
26
115
 
27
116
  export { manageService, serviceCommand };
28
117
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/service.ts"],"names":[],"mappings":";;;AAGA,MAAM,UAAU,CAAC,OAAA,EAAS,QAAQ,QAAU,EAAA,MAAA,EAAQ,WAAW,MAAM,CAAA;AACrE,MAAM,QAAW,GAAA,CAAC,SAAW,EAAA,SAAA,EAAW,KAAK,CAAA;AAEhC,MAAA,aAAA,GAAqD,OAChE,MAAA,EACA,OACG,KAAA;AACH,EAAA,IAAI,WAAW,SAAW,EAAA;AACxB,IAAM,MAAA,MAAA,GAAS,SAAS,CAAyB,uBAAA,CAAA,CAAA;AACjD,IAAA,MAAM,OAAU,GAAA,QAAA,CAAS,MAAO,CAAA,QAAA,EAAU,CAAA;AAC1C,IAAQ,OAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,QAAA,EAAU,CAAA;AAE9B,IAAA;AAAA,GACK,MAAA;AACL,IAAA,MAAM,GAAM,GAAA,OAAA,KAAY,KAAQ,GAAA,CAAA,QAAA,EAAW,OAAO,CAAK,CAAA,GAAA,EAAA;AACvD,IAAA,MAAM,QAAW,GAAA,QAAA;AAAA,MACf,CAAO,IAAA,EAAA,MAAM,CACX,CAAA,EAAA,CAAC,SAAS,MAAQ,EAAA,MAAM,CAAE,CAAA,QAAA,CAAS,MAAM,CAAA,GACrC,CAAmC,gCAAA,EAAA,GAAG,KACtC,EACN,CAAA;AAAA,KACF;AACA,IAAA,QAAA,CAAS,CAAU,QAAA,CAAA,CAAA;AACnB,IAAQ,OAAA,CAAA,GAAA,CAAI,QAAS,CAAA,QAAA,EAAU,CAAA;AAAA;AAEnC;AAEO,SAAS,eAAe,OAAkB,EAAA;AAC/C,EAAA,OAAA,CACG,QAAQ,SAAS,CAAA,CACjB,WAAY,CAAA,iBAAiB,EAC7B,WAAY,CAAA,IAAI,QAAS,CAAA,QAAQ,EAAE,OAAQ,CAAA,OAAO,EAAE,OAAQ,CAAA,MAAM,CAAC,CACnE,CAAA,WAAA;AAAA,IACC,IAAI,QAAS,CAAA,SAAS,CAAE,CAAA,OAAA,CAAQ,QAAQ,CAAE,CAAA,WAAA,EAAc,CAAA,OAAA,CAAQ,KAAK;AAAA,GACvE,CACC,OAAO,aAAa,CAAA;AACzB","file":"service.js","sourcesContent":["import { Argument, Command } from \"commander\";\nimport { execSync } from \"node:child_process\";\nimport { CommandActionType } from \"../types.js\";\nconst actions = [\"start\", \"stop\", \"status\", \"list\", \"install\", \"save\"];\nconst services = [\"reactor\", \"connect\", \"all\"];\n\nexport const manageService: CommandActionType<[string, string]> = async (\n action,\n service,\n) => {\n if (action === \"install\") {\n const result = execSync(`pm2 startup | tail -n 1`);\n const result2 = execSync(result.toString());\n console.log(result2.toString());\n\n return;\n } else {\n const app = service !== \"all\" ? `--only ${service}` : \"\";\n const response = execSync(\n `pm2 ${action} ${\n [\"start\", \"stop\", \"list\"].includes(action)\n ? `powerhouse-services.config.json ${app}`\n : \"\"\n }`,\n );\n execSync(`pm2 save`);\n console.log(response.toString());\n }\n};\n\nexport function serviceCommand(program: Command) {\n program\n .command(\"service\")\n .description(\"Manage services\")\n .addArgument(new Argument(\"action\").choices(actions).default(\"list\"))\n .addArgument(\n new Argument(\"service\").choices(services).argOptional().default(\"all\"),\n )\n .action(manageService);\n}\n"]}
1
+ {"version":3,"sources":["../../src/commands/service.ts"],"names":[],"mappings":"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","file":"service.js","sourcesContent":["import { Argument, Command } from \"commander\";\nimport { execSync, spawn } from \"node:child_process\";\nimport { CommandActionType } from \"../types.js\";\nimport pm2, { StartOptions } from \"pm2\";\nimport { getConfig, PowerhouseConfig } from \"@powerhousedao/config/powerhouse\";\n\nconst actions = [\"start\", \"stop\", \"status\", \"list\", \"install\", \"save\"];\nconst services = [\"reactor\", \"connect\", \"all\"];\n\nlet reactorPort = 8442;\nlet connectPort = 8443;\nexport const manageService: CommandActionType<[string, string]> = async (\n action,\n service,\n) => {\n try {\n const config = getConfig();\n if (config.reactor?.port) {\n reactorPort = config.reactor.port;\n }\n if (config.studio?.port) {\n connectPort = config.studio.port;\n }\n\n pm2.connect((err) => {\n switch (action) {\n case \"start\":\n startServices(service);\n break;\n case \"stop\":\n stopServices(service);\n break;\n case \"status\":\n statusServices();\n break;\n }\n });\n } catch (error) {\n console.error(error);\n }\n};\n\nexport function serviceCommand(program: Command) {\n program\n .command(\"service\")\n .description(\"Manage services\")\n .addArgument(new Argument(\"action\").choices(actions).default(\"list\"))\n .addArgument(\n new Argument(\"service\").choices(services).argOptional().default(\"all\"),\n )\n .action(manageService);\n}\n\nfunction startServices(service: string) {\n if (service === \"reactor\" || service === \"all\") {\n const reactorOptions: StartOptions = {\n name: \"reactor\",\n script: \"npx ph-cli reactor\",\n };\n console.log(\"Starting reactor...\");\n pm2.start(reactorOptions, (err) => {\n if (err) {\n console.log(err.name);\n // throw new Error(err.message);\n }\n\n dumpServices();\n });\n console.log(\"Reactor started\");\n }\n\n if (service === \"connect\" || service === \"all\") {\n const connectOptions: StartOptions = {\n name: \"connect\",\n script: \"npx ph-cli connect\",\n args: [\"--port\", connectPort.toString()],\n };\n console.log(\"Starting connect...\");\n pm2.start(connectOptions, (err) => {\n if (err) {\n throw new Error(err.message);\n }\n\n dumpServices();\n });\n console.log(\"Connect started\");\n }\n}\n\nfunction dumpServices() {\n pm2.dump((err) => {\n if (err) {\n throw new Error(err.message);\n }\n\n statusServices();\n });\n}\n\nfunction stopServices(service: string) {\n if (service === \"all\" || service === \"connect\") {\n pm2.stop(\"connect\", (err) => {\n if (err) {\n throw new Error(err.message);\n }\n\n dumpServices();\n });\n }\n if (service === \"all\" || service === \"reactor\") {\n pm2.stop(\"reactor\", (err) => {\n if (err) {\n throw new Error(err.message);\n }\n\n dumpServices();\n });\n }\n}\n\nfunction statusServices() {\n pm2.list((err, list) => {\n const formattedList = list.map((item) => {\n return {\n id: item.pm_id,\n name: item.name,\n pid: item.pid,\n uptime: item.pm2_env?.pm_uptime,\n restarts: item.pm2_env?.unstable_restarts,\n status: item.pm2_env?.status,\n mem: item.monit?.memory,\n cpu: item.monit?.cpu,\n };\n });\n\n console.table(formattedList);\n process.exit(0);\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ OUTPUT=$(pm2 startup | tail -n 1)
2
+ eval $OUTPUT
3
+ sudo systemctl enable pm2-$USER
4
+ sudo systemctl start pm2-$USER
@@ -0,0 +1,4 @@
1
+ sudo systemctl stop pm2-$USER
2
+ sudo systemctl disable pm2-$USER
3
+ OUTPUT=$(pm2 unstartup | tail -n 1)
4
+ eval $OUTPUT
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
3
+ . ~/.nvm/nvm.sh
4
+ export NVM_DIR="$HOME/.nvm"
5
+ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
6
+ [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
7
+ nvm --version
8
+ nvm install 20
9
+ npm install -g pnpm
10
+ pnpm setup
11
+ source $HOME/.bashrc
12
+ pnpm install -g ph-cmd
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/ph-cli",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -40,11 +40,11 @@
40
40
  "react": "^18.3.1",
41
41
  "react-dom": "^18.3.1",
42
42
  "@powerhousedao/codegen": "0.31.3",
43
- "@powerhousedao/design-system": "1.21.3",
44
43
  "@powerhousedao/config": "1.12.0",
44
+ "@powerhousedao/reactor-local": "1.15.3",
45
+ "@powerhousedao/design-system": "1.21.3",
45
46
  "@powerhousedao/scalars": "1.19.0",
46
- "document-model-libs": "1.127.3",
47
- "@powerhousedao/reactor-local": "1.15.3"
47
+ "document-model-libs": "1.127.3"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "tsup",