示例#1
0
 def get(self):
     result = {"result": Errors.OK, "venv_histories": [], "total": 0}
     try:
         venv_id = self.get_argument("venv_id", "")
         offset = int(self.get_argument("offset", "0"))
         limit = int(self.get_argument("limit", "0"))
         if venv_id:
             venv_info = VenvManager.instance().info(venv_id)
             if venv_info:
                 venv_histories = VenvManager.instance().list_history(
                     offset, limit, {"venv_id": venv_id})
                 if venv_histories:
                     result["venv_histories"] = venv_histories["histories"]
                     result["total"] = venv_histories["total"]
                 result["offset"] = offset
                 result["limit"] = limit
             elif venv_info is None:
                 Errors.set_result_error("VenvNotExists", result)
             else:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#2
0
 def get(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_argument("venv_id", "")
         sha1 = self.get_argument("sha1", "")
         if venv_id:
             venv_info = VenvManager.instance().info(venv_id)
             if venv_info:
                 if sha1 == "":
                     sha1 = venv_info["sha1"]
                 f = VenvManager.instance().open(venv_id, sha1)
                 if f:
                     self.set_header('Content-Type',
                                     'application/octet-stream')
                     if "venv_store" in CONFIG:
                         if "tar.gz" in CONFIG["venv_store"]:
                             self.set_header(
                                 'Content-Disposition',
                                 'attachment; filename=%s.tar.gz' % venv_id)
                         elif "zip" in CONFIG["venv_store"]:
                             self.set_header(
                                 'Content-Disposition',
                                 'attachment; filename=%s.zip' % venv_id)
                         else:
                             self.set_header(
                                 'Content-Disposition',
                                 'attachment; filename=%s.tar.gz' % venv_id)
                     else:
                         self.set_header(
                             'Content-Disposition',
                             'attachment; filename=%s.tar.gz' % venv_id)
                     buf_size = 1024 * 1024
                     while True:
                         data = f.read(buf_size)
                         if not data:
                             break
                         self.write(data)
                         self.flush()
                         yield gen.moment
                     f.close()
                     self.finish()
                     return
                 else:
                     Errors.set_result_error("OperationFailed", result)
             elif venv_info is None:
                 Errors.set_result_error("VenvNotExists", result)
             else:
                 Errors.set_result_error("OperationFailed", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.set_status(400)
     self.write(result)
     self.finish()
示例#3
0
 def post(self):
     result = {"result": Errors.OK}
     try:
         name = self.get_form_argument("name", "")
         description = self.get_form_argument("description", "")
         file_path = self.file_path.decode("utf-8")
         if name and os.path.exists(file_path) and os.path.isfile(
                 file_path):
             file_name = os.path.split(file_path)[-1].lower()
             if ((CONFIG["venv_store"].endswith("tar.gz")
                  and file_name.endswith("tar.gz"))
                     or (CONFIG["venv_store"].endswith("zip")
                         and file_name.endswith("zip"))):
                 result["venv_id"] = VenvManager.instance().create(
                     name, description, file_path)
             else:
                 LOG.warning("venv wrong format")
                 Errors.set_result_error("VenvWrongFormat", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     LOG.debug("deploy venv package use: %ss", time.time() - self.start)
     self.write(result)
     self.finish()
示例#4
0
 def delete(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_argument("venv_id", "")
         if venv_id:
             success = VenvManager.instance().delete(venv_id)
             if not success:
                 Errors.set_result_error("OperationFailed", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#5
0
 def post(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_form_argument("venv_id", "")
         name = self.get_form_argument("name", "")
         description = self.get_form_argument("description", "")
         LOG.debug(
             "UpdateVenvHandler venv_id: %s, name: %s, description: %s",
             venv_id, name, description)
         if venv_id and VenvManager.instance().info(venv_id):
             success = VenvManager.instance().update(
                 venv_id, name, description, self.file_path.decode("utf-8"))
             if not success:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     LOG.debug("update venv package use: %ss", time.time() - self.start)
     self.write(result)
     self.finish()
示例#6
0
 def delete(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_argument("venv_id", "")
         history_id = int(self.get_argument("history_id", "-1"))
         if history_id != -1 and venv_id:
             success = VenvManager.instance().delete_history(
                 history_id, venv_id)
             if not success:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#7
0
 def put(self):
     result = {"result": Errors.OK}
     try:
         self.json_data = json.loads(self.request.body.decode("utf-8"))
         history_id = self.get_json_argument("history_id", "")
         venv_id = self.get_json_argument("venv_id", "")
         if history_id and venv_id:
             success = VenvManager.instance().activate_history(
                 history_id, venv_id=venv_id)
             if not success:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#8
0
 def get(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_argument("venv_id", "")
         if venv_id:
             venv_info = VenvManager.instance().info(venv_id)
             if venv_info:
                 result["venv_info"] = venv_info
             elif venv_info is None:
                 Errors.set_result_error("VenvNotExists", result)
             else:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#9
0
 def get(self):
     result = {"result": Errors.OK}
     try:
         venv_id = self.get_argument("venv_id", "")
         history_id = int(self.get_argument("history_id", "-1"))
         if history_id != -1:
             venv_history = VenvManager.instance().info_history(
                 history_id, venv_id)
             if venv_history:
                 result["history_info"] = venv_history
             elif venv_history is None:
                 Errors.set_result_error("VenvHistoryNotExists", result)
             else:
                 Errors.set_result_error("OperationFailed", result)
         else:
             LOG.warning("invalid arguments")
             Errors.set_result_error("InvalidParameters", result)
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#10
0
 def get(self):
     result = {"result": Errors.OK}
     try:
         offset = int(self.get_argument("offset", "0"))
         limit = int(self.get_argument("limit", "0"))
         filters = {}
         name = self.get_argument("name", "")
         if name:
             filters["name"] = name
         venv_id = self.get_argument("id", "")
         if venv_id:
             filters["id"] = venv_id
         LOG.debug("ListVenvHandler offset: %s, limit: %s", offset, limit)
         r = VenvManager.instance().list(offset, limit, filters=filters)
         result["venvs"] = r["venvs"]
         result["total"] = r["total"]
         result["offset"] = offset
         result["limit"] = limit
     except Exception as e:
         LOG.exception(e)
         Errors.set_result_error("ServerException", result)
     self.write(result)
     self.finish()
示例#11
0
def main():
    parser = argparse.ArgumentParser(prog='litemanager')
    parser.add_argument("-c",
                        "--config",
                        required=True,
                        help="configuration file path")
    parser.add_argument("-v",
                        "--version",
                        action='version',
                        version='%(prog)s ' + __version__)
    args = parser.parse_args()

    if args.config:
        success = load_config(args.config)
        if success:
            common.init_storage()
            logger.config_logging(file_name="manager.log",
                                  log_level=CONFIG["log_level"],
                                  dir_name=CONFIG["log_path"],
                                  day_rotate=False,
                                  when="D",
                                  interval=1,
                                  max_size=20,
                                  backup_count=5,
                                  console=True)

            LOG.info("service start")

            try:
                if CONFIG["ldfs_http_host"] and CONFIG["ldfs_http_port"]:
                    LDFS = LiteDFS(CONFIG["ldfs_http_host"],
                                   CONFIG["ldfs_http_port"])
                venvs_db = Venvs()
                venv_history_db = VenvHistory()
                tasks_db = Tasks()
                applications_db = Applications()
                application_history_db = ApplicationHistory()
                workflows_db = Workflows()
                works_db = Works()
                schedules_db = Schedules()
                services_db = Services()
                venv_manager = VenvManager()
                app_manager = AppManager()
                task_scheduler = Scheduler(CONFIG["scheduler_interval"])
                http_server = tornado.httpserver.HTTPServer(
                    Application(),
                    max_buffer_size=CONFIG["max_buffer_size"],
                    chunk_size=10 * 1024 * 1024)
                http_server.listen(CONFIG["http_port"],
                                   address=CONFIG["http_host"])
                # http_server.bind(CONFIG["http_port"], address = CONFIG["http_host"])
                listener = DiscoveryListener(Connection, task_scheduler)
                listener.listen(CONFIG["tcp_port"], CONFIG["tcp_host"])
                stop_service.Servers.HTTP_SERVER = http_server
                stop_service.Servers.SERVERS.append(task_scheduler)
                stop_service.Servers.SERVERS.append(venvs_db)
                stop_service.Servers.SERVERS.append(venv_history_db)
                stop_service.Servers.SERVERS.append(applications_db)
                stop_service.Servers.SERVERS.append(application_history_db)
                stop_service.Servers.SERVERS.append(tasks_db)
                stop_service.Servers.SERVERS.append(workflows_db)
                stop_service.Servers.SERVERS.append(works_db)
                stop_service.Servers.SERVERS.append(schedules_db)
                stop_service.Servers.SERVERS.append(services_db)
                stop_service.Servers.SERVERS.append(venv_manager)
                stop_service.Servers.SERVERS.append(app_manager)
                signal.signal(signal.SIGTERM, stop_service.sig_handler)
                signal.signal(signal.SIGINT, stop_service.sig_handler)
                tornado.ioloop.IOLoop.instance().start()
            except Exception as e:
                LOG.exception(e)

            LOG.info("service end")
        else:
            print("failed to load configuration: %s" % args.config)
    else:
        parser.print_help()