qiaofeng1227 1 rok pred
rodič
commit
c0983f3f9a

+ 1 - 1
appmanage/api/service/manage.py

@@ -161,7 +161,7 @@ def get_update_list():
 
 
     if compared_version(local_version, version) == -1:
     if compared_version(local_version, version) == -1:
         ret['update'] = True
         ret['update'] = True
-        cmd = "wget -O CHANGELOG.md  " + const.ARTIFACT_URL + "/CHANGELOG.md  && cat CHANGELOG.md" 
+        cmd = "wget -O CHANGELOG.md  " + const.ARTIFACT_URL + "/CHANGELOG.md  && head -n 20 CHANGELOG.md " 
         change_log_contents = shell_execute.execute_command_output_all(cmd)['result']
         change_log_contents = shell_execute.execute_command_output_all(cmd)['result']
         change_log = change_log_contents.split('## ')[1].split('\n')
         change_log = change_log_contents.split('## ')[1].split('\n')
         date = change_log[0].split()[-1]
         date = change_log[0].split()[-1]

+ 69 - 0
appmanage/api/utils/files.py

@@ -0,0 +1,69 @@
+from api.utils.common_log import myLogger
+from api.utils.helper import Singleton
+
+
+# This class is add/modify/list/delete item to item=value(键值对) model settings file
+__all__ = ['settings']
+
+class SettingsFile(object):
+
+    __metaclass__ = Singleton
+
+    def __init__(self, path):
+        self._config = {}
+        self.config_file = path
+        
+    def build_config(self):
+        try:
+            with open(self.config_file, 'r') as f:
+                data = f.readlines()
+        except Exception as e:
+            data = []
+        for i in data:
+            if i.startswith('#'):
+                continue
+            i = i.replace('\n', '').replace('\r\n', '')
+            if not i:
+                continue
+            tmp = i.split('=')
+            if len(tmp) != 2:
+                myLogger.error_logger(f'invalid format {i}')
+                continue
+            
+            key, value = i.split('=')
+            if self._config.get(key) != value:
+                self._config[key] = value
+        return self._config
+
+    def init_config_from_file(self, config_file: str=None):
+        if config_file:
+            self.config_file = config_file
+        self.build_config()
+
+    def update_setting(self, key: str, value: str):
+        self._config[key] = value
+        self.flush_config()
+
+    def get_setting(self, key: str, default=None):
+        return self._config.get(key, default)
+
+    def list_all_settings(self) -> dict:
+        self.build_config()
+        return self._config
+
+    def delete_setting(self, key: str, value: str):
+        if self._config.get(key) == value:
+            del self._config[key]
+            self.flush_config()
+
+    def flush_config(self):
+        try:
+            with open(self.config_file, 'w') as f:
+                for key, value in self._config.items():
+                    f.write(f'{key}={value}\n')
+        except Exception as e:
+            myLogger.error_logger(e)
+            
+
+# This class is add/modify/cat/delete content from file
+# src: path | URL

+ 11 - 1
appmanage/api/utils/shell_execute.py

@@ -4,13 +4,20 @@ from api.utils.common_log import myLogger
 from api.exception.command_exception import CommandException
 from api.exception.command_exception import CommandException
 from api.utils import const
 from api.utils import const
 
 
+
+# This fuction is for running shell commands on container
+# cmd_str e.g: "ls -a"
+# return string limit: 4000 chars? to do
 def execute_command_output(cmd_str):
 def execute_command_output(cmd_str):
     print(cmd_str)
     print(cmd_str)
     out_str = subprocess.getoutput(cmd_str)
     out_str = subprocess.getoutput(cmd_str)
     print(out_str)
     print(out_str)
     return out_str
     return out_str
 
 
-# cmd_str: 执行的command命令
+
+# This fuction is for running shell commands on host machine
+# cmd_str e.g: "ls -a"
+# return string limit: 4000 chars
 def execute_command_output_all(cmd_str):
 def execute_command_output_all(cmd_str):
     
     
     myLogger.info_logger("Start to execute cmd: " + cmd_str)
     myLogger.info_logger("Start to execute cmd: " + cmd_str)
@@ -25,6 +32,9 @@ def execute_command_output_all(cmd_str):
        myLogger.info_logger(process)
        myLogger.info_logger(process)
        raise CommandException(const.ERROR_SERVER_COMMAND,"Docker returns the original error", process.stderr)
        raise CommandException(const.ERROR_SERVER_COMMAND,"Docker returns the original error", process.stderr)
 
 
+
+
+# This fuction is convert container commands to host machine commands
 def convert_command(cmd_str):
 def convert_command(cmd_str):
     convert_cmd = ""
     convert_cmd = ""
     if cmd_str == "":
     if cmd_str == "":

+ 3 - 1
appmanage/config/settings.conf

@@ -7,4 +7,6 @@
 #smtp_server=smtp.websoft9.com
 #smtp_server=smtp.websoft9.com
 #smtp_tls/ssl=true
 #smtp_tls/ssl=true
 #smtp_user=admin
 #smtp_user=admin
-#smtp_password=password
+#smtp_password=password
+#install_path=/data
+#artifact_url=https://w9artifact.blob.core.windows.net/release/websoft9

+ 12 - 1
appmanage/docs/DEV-SETUP.md

@@ -28,7 +28,18 @@ This repository only support deployment on Linux:
    cd websoft9/docker/appmanage && export APP_VERSION=latest-pr && docker compose up -d
    cd websoft9/docker/appmanage && export APP_VERSION=latest-pr && docker compose up -d
    ```
    ```
 
 
-## API
+## Structure
+
+### API
+
+```
+├── api
+│   ├── exception
+│   ├── model -- Data models and database schema
+│   ├── service -- Controllers
+│   ├── utils -- Common modules and tools
+│   └── v1 -- Views
+```
 
 
 ### Route
 ### Route
 
 

+ 2 - 1
cockpit/test/menu_override.sh

@@ -1,3 +1,4 @@
 git clone --depth=1 https://github.com/Websoft9/websoft9.git
 git clone --depth=1 https://github.com/Websoft9/websoft9.git
 rm -rf /etc/cockpit/*.override.json
 rm -rf /etc/cockpit/*.override.json
-cp -r websoft9/cockpit/menu_override/* /etc/cockpit
+cp -r websoft9/cockpit/menu_override/* /etc/cockpit
+rm -rf websoft9