manage.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import os, io, sys, platform, shutil, time, subprocess, json, datetime
  2. import socket
  3. from threading import Thread
  4. from api.utils import shell_execute, network, docker
  5. from api.model.app import App
  6. # 获取所有app的信息
  7. def get_my_app(app_name=None):
  8. #{"name":"id",...}
  9. ip = socket.gethostbyname(socket.gethostname())
  10. ret = {}
  11. ret["code"] = -1
  12. ret["message"] = "app查询失败"
  13. ret["data"] = None
  14. # get all info
  15. cmd = "sudo docker compose ls"
  16. output = shell_execute.execute_command_output_all(cmd)
  17. if int(output["code"]) == 0:
  18. output_list = output["result"].split()
  19. list = []
  20. output_list = output_list[4:]
  21. num = int(len(output_list) / 3)
  22. for i in range(0, num):
  23. name = output_list[3 * i] #name
  24. id = 0 #id
  25. status = output_list[3 * i + 1].split("(")[0] #status
  26. status_code = 0 #status_code
  27. volume = output_list[3 * i+2] #volume
  28. # get env info
  29. path = "/data/apps/" + name + "/.env"
  30. http_port_env, http_port = docker.read_env(path, "APP_HTTP_PORT")
  31. db_port_env, db_port = docker.read_env(path, "APP_DB.*_PORT")
  32. print(name+": "+ db_port)
  33. # get port and url
  34. port = 0
  35. url = "-"
  36. if http_port != "":
  37. port = int(http_port)
  38. url = "http://"+ip+":"+str(port)
  39. elif db_port != "":
  40. port = int(db_port)
  41. url = "http://" + ip + ":" + str(port)
  42. # get user_name
  43. username_env, user_name = docker.read_env(path, "APP_USER")
  44. if user_name == "":
  45. user_name = "-"
  46. # get password
  47. password_env, password = docker.read_env(path, "POWER_PASSWORD")
  48. if password == "":
  49. password = "-"
  50. app = App(id=id, name=name, status_code=status_code, status=status, port=port, volume=volume, url=url, user_name=user_name, password=password)
  51. list.append(app.dict())
  52. flag = 0
  53. if app_name != None:
  54. for app in list:
  55. if app["name"] == app_name:
  56. list.clear()
  57. list.append(app)
  58. flag = 1
  59. break
  60. if app_name == None or flag == 1:
  61. ret["code"] = 0
  62. ret["message"] = "app查询成功"
  63. ret["data"] = list
  64. return ret
  65. def install_app(app_name):
  66. # check directory
  67. docker.create_app_directory(app_name)
  68. # check port
  69. docker.check_app_compose(app_name)
  70. cmd = "cd /data/apps/"+app_name+" && sudo docker compose up -d"
  71. t1 = Thread(target=shell_execute.execute_command_output_all, args=(cmd,))
  72. t1.start()
  73. ret = {}
  74. ret["code"] = 0
  75. ret["message"] = "应用正在启动中,请过几分钟再查询"
  76. ret["data"] = ""
  77. return ret
  78. def if_app_exits(app_name):
  79. cmd = "docker compose ls -a | grep \'"+app_name+"\\b\'"
  80. output = shell_execute.execute_command_output_all(cmd)
  81. if int(output["code"]) == -1:
  82. return False
  83. else:
  84. return True
  85. def start_app(app_name):
  86. ret = {}
  87. ret["code"] = -1
  88. if if_app_exits(app_name):
  89. cmd = "docker start "+app_name
  90. output = shell_execute.execute_command_output_all(cmd)
  91. if int(output["code"]) == 0:
  92. ret["code"] = 0
  93. ret["message"] = "应用启动成功"
  94. else:
  95. ret["message"] = "应用启动失败"
  96. else:
  97. ret["message"] = "应用不存在"
  98. return ret
  99. def stop_app(app_name):
  100. ret = {}
  101. ret["code"] = -1
  102. if if_app_exits(app_name):
  103. cmd = "docker stop " + app_name
  104. output = shell_execute.execute_command_output_all(cmd)
  105. if int(output["code"]) == 0:
  106. ret["code"] = 0
  107. ret["message"] = "应用停止成功"
  108. else:
  109. ret["message"] = "应用停止失败"
  110. else:
  111. ret["message"] = "应用不存在"
  112. return ret
  113. def restart_app(app_name):
  114. ret = {}
  115. ret["code"] = -1
  116. if if_app_exits(app_name):
  117. cmd = "docker restart " + app_name
  118. output = shell_execute.execute_command_output_all(cmd)
  119. if int(output["code"]) == 0:
  120. ret["code"] = 0
  121. ret["message"] = "应用重启成功"
  122. else:
  123. ret["message"] = "应用重启失败"
  124. else:
  125. ret["message"] = "应用不存在"
  126. return ret
  127. def delete_app(app_name):
  128. ret = {}
  129. ret["code"] = -1
  130. if_stopped = stop_app(app_name)
  131. if if_stopped["code"] == 0:
  132. cmd = "docker rm "+app_name
  133. output = shell_execute.execute_command_output_all(cmd)
  134. if int(output["code"]) == 0:
  135. ret["code"] = 0
  136. ret["message"] = "应用删除成功"
  137. else:
  138. ret["message"] = "应用删除失败"
  139. else:
  140. ret["message"] = if_stopped["message"]
  141. return ret