| | import os |
| |
|
| | from configs import dify_config |
| |
|
| | if os.environ.get("DEBUG", "false").lower() != "true": |
| | from gevent import monkey |
| |
|
| | monkey.patch_all() |
| |
|
| | import grpc.experimental.gevent |
| |
|
| | grpc.experimental.gevent.init_gevent() |
| |
|
| | import json |
| | import threading |
| | import time |
| | import warnings |
| |
|
| | from flask import Response |
| |
|
| | from app_factory import create_app |
| |
|
| | |
| | from events import event_handlers |
| | from extensions.ext_database import db |
| |
|
| | |
| | from models import account, dataset, model, source, task, tool, tools, web |
| |
|
| | |
| |
|
| |
|
| | warnings.simplefilter("ignore", ResourceWarning) |
| |
|
| | os.environ["TZ"] = "UTC" |
| | |
| | if hasattr(time, "tzset"): |
| | time.tzset() |
| |
|
| |
|
| | |
| | app = create_app() |
| | celery = app.extensions["celery"] |
| |
|
| | if dify_config.TESTING: |
| | print("App is running in TESTING mode") |
| |
|
| |
|
| | @app.after_request |
| | def after_request(response): |
| | """Add Version headers to the response.""" |
| | response.set_cookie("remember_token", "", expires=0) |
| | response.headers.add("X-Version", dify_config.CURRENT_VERSION) |
| | response.headers.add("X-Env", dify_config.DEPLOY_ENV) |
| | return response |
| |
|
| |
|
| | @app.route("/health") |
| | def health(): |
| | return Response( |
| | json.dumps({"pid": os.getpid(), "status": "ok", "version": dify_config.CURRENT_VERSION}), |
| | status=200, |
| | content_type="application/json", |
| | ) |
| |
|
| |
|
| | @app.route("/threads") |
| | def threads(): |
| | num_threads = threading.active_count() |
| | threads = threading.enumerate() |
| |
|
| | thread_list = [] |
| | for thread in threads: |
| | thread_name = thread.name |
| | thread_id = thread.ident |
| | is_alive = thread.is_alive() |
| |
|
| | thread_list.append( |
| | { |
| | "name": thread_name, |
| | "id": thread_id, |
| | "is_alive": is_alive, |
| | } |
| | ) |
| |
|
| | return { |
| | "pid": os.getpid(), |
| | "thread_num": num_threads, |
| | "threads": thread_list, |
| | } |
| |
|
| |
|
| | @app.route("/db-pool-stat") |
| | def pool_stat(): |
| | engine = db.engine |
| | return { |
| | "pid": os.getpid(), |
| | "pool_size": engine.pool.size(), |
| | "checked_in_connections": engine.pool.checkedin(), |
| | "checked_out_connections": engine.pool.checkedout(), |
| | "overflow_connections": engine.pool.overflow(), |
| | "connection_timeout": engine.pool.timeout(), |
| | "recycle_time": db.engine.pool._recycle, |
| | } |
| |
|
| |
|
| | if __name__ == "__main__": |
| | app.run(host="0.0.0.0", port=5001) |
| |
|