diff --git a/server.py b/server.py index 5ad54cd..467293a 100755 --- a/server.py +++ b/server.py @@ -12,6 +12,7 @@ import os import util import contributor_helper import users_helper +import trendings_helper configfile = os.path.join(os.environ['DASH_CONFIG'], 'config.cfg') cfg = configparser.ConfigParser() @@ -34,6 +35,7 @@ serv_redis_db = redis.StrictRedis( contributor_helper = contributor_helper.Contributor_helper(serv_redis_db, cfg) users_helper = users_helper.Users_helper(serv_redis_db, cfg) +trendings_helper = trendings_helper.Trendings_helper(serv_redis_db, cfg) subscriber_log = redis_server_log.pubsub(ignore_subscribe_messages=True) subscriber_log.psubscribe(cfg.get('RedisLog', 'channel')) @@ -485,6 +487,37 @@ def getLoginVSCOntribution(): data = users_helper.getLoginVSCOntribution(date) return jsonify(data) +''' TRENDINGS ''' +@app.route("/_getTrendingEvents") +def getTrendingEvents(): + try: + date = datetime.datetime.fromtimestamp(float(request.args.get('date'))) + except: + date = datetime.datetime.now() + + data = trendings_helper.getTrendingEvents(date) + return jsonify(data) + +@app.route("/_getTrendingCategs") +def getTrendingCategs(): + try: + date = datetime.datetime.fromtimestamp(float(request.args.get('date'))) + except: + date = datetime.datetime.now() + + data = trendings_helper.getTrendingCategs(date) + return jsonify(data) + +@app.route("/_getTrendingTags") +def getTrendingTags(): + try: + date = datetime.datetime.fromtimestamp(float(request.args.get('date'))) + except: + date = datetime.datetime.now() + + data = trendings_helper.getTrendingTags(date) + return jsonify(data) + if __name__ == '__main__': app.run(host='localhost', port=8001, threaded=True) diff --git a/static/js/trendings.js b/static/js/trendings.js index 375a976..a1e339e 100644 --- a/static/js/trendings.js +++ b/static/js/trendings.js @@ -1,22 +1,115 @@ +/* VARS */ +var date; +var eventPie = ["#eventPie"]; +var eventLine = ["#eventLine"]; +var categPie = ["#categPie"]; +var categLine = ["#categLine"]; +var tagPie = ["#tagPie"]; +var tagLine = ["#tagLine"]; +var sightingEventPieWidget; +var sightingCategLineWidget; + +/* OPTIONS */ +var datePickerOptions = { + showOn: "button", + maxDate: 0, + buttonImage: urlIconCalendar, + buttonImageOnly: true, + buttonText: "Select date", + showAnim: "slideDown", + onSelect: dateChanged +}; +var lineChartOption = { + lines: { + show: true, + steps: true, + fill: true + }, + xaxis: { + mode: "time", + minTickSize: [1, "day"], + } +}; +var pieChartOption = { + series: { + pie: { + innerRadius: 0.5, + show: true + } + } +}; + +/* FUNCTIONS */ + +function updatePie(pie, data) { + pieID = pie[0]; + pieWidget = pie[1]; + if (data === undefined || data.length == 0 || (data[0] == 0 && data[1] == 0)) { + toPlot = [{ label: 'No data', data: 100 }]; + } else { + toPlot = []; + for (item of data) { + toPlot.push({label: item[0], data: item[1]}); + } + } + console.log(toPlot); + if (!(pieWidget === undefined)) { + pieWidget.setData(toPlot); + pieWidget.setupGrid(); + pieWidget.draw(); + } else { + pieWidget = $.plot(pieID, toPlot, pieChartOption); + pie.push(pieWidget); + } +} + +function updateLine(line, data) { + lineID = line[0]; + lineWidget = line[1]; + temp = []; + var i=0; + for (item of data) { + temp.push([new Date(item[0]*1000), item[1]]); + } + data = {label: 'Overtime', data: temp} + if (!(lineWidget === undefined)) { + lineWidget.setData(toPlot); + lineWidget.draw(); + } else { + lineWidget = $.plot(lineID, [data], lineChartOption); + line.push(lineWidget); + } +} + +function updatePieLine(pie, line, url) { + // format date + // var now = new Date(); + // if (date.toDateString() == now.toDateString()) { + // date = now; + // } else { + // date.setTime(date.getTime() + (24*60*60*1000-1)); // include data of selected date + // } + $.getJSON( url+"?date="+parseInt(date.getTime()/1000), function( data ) { + updatePie(pie, data[0][1]); + updateLine(line, data); + }); +} + function dateChanged() { - var date = datePickerWidget.datepicker( "getDate" ); - console.log(date); + date = datePickerWidget.datepicker( "getDate" ); + updatePieLine(eventPie, eventLine, url_getTrendingEvent) + updatePieLine(categPie, categLine, url_getTrendingCateg) + updatePieLine(tagPie, tagLine, url_getTrendingTag) } $(document).ready(function () { - var datePickerOptions = { - showOn: "button", - maxDate: 0, - buttonImage: urlIconCalendar, - buttonImageOnly: true, - buttonText: "Select date", - showAnim: "slideDown", - onSelect: dateChanged - }; - var datePickerOptions = jQuery.extend({}, datePickerOptions); - datePickerWidget = $( "#datepicker" ); - datePickerWidget.datepicker(datePickerOptions); + datePickerWidget = $( "#datepicker" ).datepicker(datePickerOptions); datePickerWidget.datepicker("setDate", new Date()); + date = datePickerWidget.datepicker( "getDate" ); + + updatePieLine(eventPie, eventLine, url_getTrendingEvent) + updatePieLine(categPie, categLine, url_getTrendingCateg) + updatePieLine(tagPie, tagLine, url_getTrendingTag) }); diff --git a/templates/trendings.html b/templates/trendings.html index 7cdb26a..36fcb95 100644 --- a/templates/trendings.html +++ b/templates/trendings.html @@ -122,8 +122,9 @@ small { Most active events
-
-
+
+
+
@@ -134,8 +135,9 @@ small { Most active categories
-
-
+
+
+
@@ -143,11 +145,12 @@ small {
- Popular tags + Most popular tags
-
-
+
+
+
@@ -160,8 +163,8 @@ small { Sightings
-
-
+
+
@@ -171,7 +174,7 @@ small { Empty
-
+
@@ -191,6 +194,9 @@ small {