From 70b60ed80a008ff344f8f414e0b52f8bd3e65fe6 Mon Sep 17 00:00:00 2001 From: ssung Date: Tue, 24 Oct 2023 14:49:26 +0900 Subject: [PATCH] ADD: Add test code. --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++ app-setting.sh | 14 +++++++++++++ config.json | 9 ++++++++ config2.json | 6 ++++++ example-app.service | 10 +++++++++ main.py | 24 +++++++++++++++++++++ 6 files changed, 114 insertions(+) create mode 100644 README.md create mode 100755 app-setting.sh create mode 100644 config.json create mode 100644 config2.json create mode 100644 example-app.service create mode 100644 main.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..45f9f10 --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# SDTcloud App Format + +### SDTcloud 앱을 만들기 위한 앱 포맷입니다. + +```bash + +``` + +### 코드 내용 +- SDTcloud에 앱을 동작시키기 위해서는 앱을 실행하는 코드에 다음 내용이 포함되어 있어야 합니다. +- Config 파일 Load path를 고정된 위치에서 가져오도록 코드를 작성해야 합니다. +- 즉, SDTcloud의 앱은 "/usr/local/sdt/app" 디렉토리에 보관되고 관리 되므로, "/usr/local/sdt/app/앱이름/config.json" 경로와 같이 config 파일을 읽도록 코드를 작성해야 합니다. +- 또한, 앱이름은 사용자가 배포할 때마다 앱의 이름이 변경될 수 있으므로 프로세스가 매개변수를 입력받아 동적으로 변경가능하도록 설계 해야 합니다. +- 예를 들어 python의 경우 앱을 실행할 때, 앱이름을 매개 변수로 입력 받아서 실행하도록 설계 되어야 합니다. +```bash +python3 main.py -config example-app +``` + +### 파일 구성 +- 앱을 만들기 위해 SDT Cloud는 Linux 시스템의 Systemd를 사용합니다. 따라서, 앱은 Systemd를 통해서 실행되어야 하므로 실행 파일은 다음 구성으로 준비되어야 합니다. +- 앱 실행 파일: main.py (실행하고자 하는 앱의 코드 종류에 맞게 실행 파일이 있어야 함) +- 앱을 실행하기 위한 Systemd 파일: app.service + + +### Setting +- 배포하고자 하는 앱이 Python이며, 실행 파일은 main.py이고 config 파일이 pyConfig.json 이며, 이 앱의 이름을 example-app으로 앱을 저장할 것이라면, +- 앱을 저장하기 위해 다음 명령어로 셋팅해야 합니다. +```bash +$ mv config1.json pyConfig.json +$ vi pyConfig.json -> config 값 수정 +$ ./app-setting.sh example-app +``` +- 위 작업이 완료되면 앱이 SDT cloud에 배포하기 위한 기본적인 앱 파일 구조가 생성된 것 입니다. +- 이후, 본인이 만들고자 하는 앱을 Systemd에 정상적으로 동작시키기 위해 service 파일을 수정합니다. +- 앱 이름을 example-app으로 했으므로... +```bash +$ vi example-app.service +[Unit] +Description=sdt-cloud-app + +[Service] +ExecStart=/usr/bin/python3 /usr/local/sdt/app/appName/main.py -config appName -> 내용 수정!! +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` +- service 파일에서 'ExecStart' 옵션을 본인이 배포하는 앱의 코드 언어에 맞게 수정합니다. +- 여기서 주의 해야할 점은 '/usr/local/sdt/app/appName/', '-config appName' 값은 수정해서는 안됩니다. +- 수정 완료 후, 생성한 앱을 SDT cloud의 gitea에 저장합니다. diff --git a/app-setting.sh b/app-setting.sh new file mode 100755 index 0000000..8d1c257 --- /dev/null +++ b/app-setting.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ -z $1 ] || [ -z $2 ] || [ -z $3 ] ; then + echo "Please fill in app's name, file." + exit +fi + + + +mv sdt-cloud-app.service $1.service +sed -i "s/sdt-cloud-app/$1/g" ./install.sh +sed -i "s/sdt-cloud-app/$1/g" ./$1.service +sed -i "s%exePath%$2%g" ./$1.service +sed -i "s/exeFile/$3/g" ./$1.service diff --git a/config.json b/config.json new file mode 100644 index 0000000..f77c7a2 --- /dev/null +++ b/config.json @@ -0,0 +1,9 @@ +{ + "topic": "performance", + "id": "sdt", + "password": "11223344", + "host": { + "address": "192.168.100.200", + "hostname": "sdt" + } +} \ No newline at end of file diff --git a/config2.json b/config2.json new file mode 100644 index 0000000..4a478a0 --- /dev/null +++ b/config2.json @@ -0,0 +1,6 @@ +{ + "hw": "intel", + "cpu": 12, + "memory": 32, + "gpu": "2080TI" +} diff --git a/example-app.service b/example-app.service new file mode 100644 index 0000000..15c184c --- /dev/null +++ b/example-app.service @@ -0,0 +1,10 @@ +[Unit] +Description=example-app + +[Service] +ExecStart=/usr/bin/python3 /usr/local/sdt/app/appName/main.py -app appName +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/main.py b/main.py new file mode 100644 index 0000000..37ac664 --- /dev/null +++ b/main.py @@ -0,0 +1,24 @@ +import paho.mqtt.client as mqtt +import json +import argparse + +from datetime import datetime +import time +import yaml + +parser = argparse.ArgumentParser() +parser.add_argument('-app',help='') +args = parser.parse_args() + +with open(f'/usr/local/sdt/app/{args.app}/config.json', encoding='UTF-8') as f: + jsonData = json.load(f) + + +# mqttc = mqtt.Client() # puclisher 이름 +# mqttc.username_pw_set("sdt", "251327") +# mqttc.connect("13.209.39.139", 32259) +while True: + print(f"Config value: {jsonData['topic']}", flush=True) + time.sleep(2) + +