Created by
David Macias
| from app import db
from sqlalchemy.sql import func
from datetime import datetime
import redis
import rq
...
class Event(db.Model):
id = db.Column(db.Integer, primary_key=True)
sid = db.Column(db.String(120))
status = db.Column(db.String(32))
sequence = db.Column(db.Integer)
recording = db.Column(db.String(120))
recordingDuration = db.Column(db.Integer)
created = db.Column(db.DateTime, index=True, default=datetime.utcnow)
job_id = db.Column(db.Integer, db.ForeignKey('job.id'))
def __repr__(self):
return '<Event {}>'.format(self.status)
def longestCall():
longestCall = db.session.query(func.max(Event.recordingDuration)).first()
return longestCall
def shortestCall():
shortestCall = db.session.query(func.min(Event.recordingDuration)).first()
return shortestCall
def avgCall():
avgCall = db.session.query(func.avg(Event.recordingDuration))
print(avgCall)
# avgCall = int(avgCall)
return avgCall
def initiateCount():
initiateCount = db.session.query(func.count(Event.id)).filter_by(status='initiated').first()
return initiateCount
def ringingCount():
ringingCount = db.session.query(func.count(Event.id)).filter_by(status='ringing').first()
return ringingCount
def inProgressCount():
inProgressCount = db.session.query(func.count(Event.id)).filter_by(status='in-progress').first()
return inProgressCount
def completedCount():
completedCount = db.session.query(func.count(Event.id)).filter_by(status='completed').first()
return completedCount
...
|
| SELECT avg(event."recordingDuration") AS avg_1
FROM event
127.0.0.1 - - [27/Jun/2022 16:01:19] "GET /events HTTP/1.1" 200 -
|
| from crypt import methods
from http import client
from app import app, db
from flask import render_template, flash, redirect, url_for, request
from app.forms import createJobForm, addCredentialsForm, editJobForm
from app.models import Credentials, Job, Event
import os
from twilio.rest import Client
...
@app.route('/events')
def viewEvents():
events = Event.query.all()
longest = Event.longestCall()
shortest = Event.shortestCall()
avg = Event.avgCall()
initiateCount = Event.initiateCount()
ringingCount = Event.ringingCount()
inProgressCount = Event.inProgressCount()
completedCount = Event.completedCount()
return render_template('events.html', title='Events', events=events, longest=longest[0], shortest=shortest[0], avg=avg, \
initiateCount=initiateCount[0], ringingCount=ringingCount[0], inProgressCount=inProgressCount[0], completedCount=completedCount[0])
...
|
| {% extends "base.html" %}
{% block app_content %}
<h1>Events Summary</h1>
<ul>
<li>Initiated Calls: {{ initiateCount }}</li>
<li>Ringing Calls: {{ ringingCount }}</li>
<li>In-Progress Calls: {{ inProgressCount }}</li>
<li>Completed Calls: {{ completedCount }}</li>
<br>
<li>Average Time of Calls: {{ avg }}</li>
<li>Longest Call: {{ longest }}</li>
<li>Shortest Call: {{ shortest }}</li>
</ul>
<h1>View Jobs</h1>
<table id="data" class="table table-striped">
<thead>
<td>SID</td>
<td>Status</td>
<td>Sequence</td>
<td>Recording</td>
<td>Duration (s)</td>
<td>Job</td>
<td>Created</td>
</thead>
<tbody>
{% for event in events %}
<tr>
<td>{{ event.sid }}</td>
<td>{{ event.status}}</td>
<td>{{ event.sequence}}</td>
{% if event.recording %}
<td><a href={{ event.recording}}>Link</a></td>
<td>{{ event.recordingDuration}}</td>
{% else %}
<td>None</td>
<td>None</td>
{% endif %}
<td>{{ event.job_id}}</td>
<td>{{ moment(event.created).format('LLL') }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
|