PBI-Measure-CallGraph/app.py
2025-03-15 21:32:56 +08:00

62 lines
1.8 KiB
Python

from flask import Flask, render_template, jsonify, request
import json
import os
from model_connector import ModelConnector
from dax_parser import DaxParser
app = Flask(__name__)
# Initialize the model connector and DAX parser
model_connector = None
dax_parser = DaxParser()
@app.route('/')
def index():
"""Render the main page."""
return render_template('index.html')
@app.route('/connect', methods=['POST'])
def connect():
"""Connect to the Analysis Services model."""
global model_connector
data = request.json
server = data.get('server')
database = data.get('database')
try:
model_connector = ModelConnector(server, database)
return jsonify({'success': True, 'message': 'Connected successfully'})
except Exception as e:
return jsonify({'success': False, 'message': str(e)})
@app.route('/get_measures')
def get_measures():
"""Get all measures from the connected model."""
if not model_connector:
return jsonify({'success': False, 'message': 'Not connected to a model'})
try:
measures = model_connector.get_measures()
return jsonify({'success': True, 'measures': measures})
except Exception as e:
return jsonify({'success': False, 'message': str(e)})
@app.route('/get_call_graph')
def get_call_graph():
"""Generate and return the call graph data."""
if not model_connector:
return jsonify({'success': False, 'message': 'Not connected to a model'})
try:
measures_df = model_connector.get_measures()
measures = measures_df.to_dict(orient="records")
graph = dax_parser.build_call_graph(measures)
return jsonify({'success': True, 'graph': graph})
except Exception as e:
return jsonify({'success': False, 'message': str(e)})
if __name__ == '__main__':
app.run(debug=True)