from sqlalchemy import create_engine, Integer, String, BIGINT, Column, DateTime from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy import select, update from sql_db_data import * from flask import Flask app = Flask(__name__) def get_top_dicks(): session = Session() top = session.query(User.user_fullname, UserDick.dick_size, User.user_id, UserDick.chat_id).join(UserDick).order_by(UserDick.dick_size.desc()).all() session.close() return top @app.route('/metrics') def metrics(): metrics = "" docks = get_top_dicks() # текущий размер пипис for dick in docks: metrics += 'pipisio{user="%s", user_id="%s", chat_id="%s"} %s\n' % (dick[0], dick[2], dick[3], dick[1]) # расстояние до следующего впереди for k in range(len(docks)): ### не самый красивый код для не самой красивой ситуации if k == 0: metrics += 'pipisio_topdick_distanso{user="%s", user_id="%s", chat_id="%s"} %s\n' % (docks[k][0], docks[k][2], docks[k][3], 0) else: i = k - 1 upper_dick_size = docks[i][1] while i > 0 and upper_dick_size == docks[k][1]: i -= 1 upper_dick_size = docks[i][1] metrics += 'pipisio_topdick_distanso{user="%s", user_id="%s", chat_id="%s"} %s\n' % (docks[k][0], docks[k][2], docks[k][3], (upper_dick_size - docks[k][1])) return metrics if __name__ == '__main__': app.run(host='0.0.0.0', port=9992) engine.dispose()