Commit a15927ce authored by Ulises Morales Ramírez's avatar Ulises Morales Ramírez

Merge branch 'reports_dynamic' into 'dev'

Reports dynamic

See merge request !12
parents 4d330260 639db3e9
# coding=utf-8
from __future__ import absolute_import
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from celery import app as celery_app
\ No newline at end of file
# coding=utf-8
from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('GeoInt_SIDT',
broker='amqp://',
backend='amqp://',
include=['GeoInt_SIDT.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
result_expires=3600,
)
if __name__ == '__main__':
app.start()
\ No newline at end of file
# coding=utf-8
from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def add(x, y):
if x > y:
return "x es mayor"
elif x < y:
return "y es mayor"
else:
return "son iguales"
@app.task
def mul(x, y):
return x * y
@app.task
def xsum(numbers):
return sum(numbers)
@app.task
def names(name):
return (name)
\ No newline at end of file
function openmodal(info) {
info2 = info.split(";");
$("#myModal").modal();
$("#log_info").append(info2);
}
function refresh() {
$.ajax({
dataType: "json",
url: 'Reload',
success: function (data) {
$.each(data, function (key, val) {
console.log(key + " = " + val.purchase_id + "" + val.progress)
if (val.progress != 100) {
$('#progress_bar' + val.purchase_id + '').attr("aria-valuenow", val.progress);
$('#progress_bar' + val.purchase_id + '').attr('style', 'width:' + val.progress + '%');
document.getElementById('progess_value' + val.purchase_id).innerHTML = val.progress + ' %';
$('#progress_bar' + val.purchase_id + '').attr("class", "progress-bar progress-bar-warning progress-bar-striped active");
$('#view_report' + val.purchase_id + '').attr('disabled', 'false');
$('#action_buttons' + val.purchase_id + '').attr("class", "hidden");
$('#main_progess' + val.purchase_id + '').removeClass("hidden");
$('#main_progess' + val.purchase_id + '').attr("class", "progress");
}
else {
$('#progress_bar' + val.purchase_id + '').attr("class", "progress-bar progress-bar-success progress-bar-striped");
$('#progress_bar' + val.purchase_id + '').attr("aria-valuenow", val.progress);
$('#progress_bar' + val.purchase_id + '').attr('style', 'width:' + val.progress + '%');
document.getElementById('progess_value' + val.purchase_id).innerHTML = val.progress + ' %';
$('#view_report' + val.purchase_id + '').removeAttr("disabled");
$('#view_report' + val.purchase_id + '').attr("href", "{{ BASE_URL }}/reports/T15QZD_sclData/" + val.purchase_id);
$('#main_progess' + val.purchase_id + '').attr("class", "hidden");
$('#action_buttons' + val.purchase_id + '').removeClass("hidden");
}
});
}
});
};
$(function () {
refresh();
var int = setInterval("refresh()", 1000);
});
$(function () {
$('#reportPage').show();
});
\ No newline at end of file
{% extends "base_top.html" %} {% extends "base_top.html" %}
{% load staticfiles %} {% load staticfiles %}
{% block headMedia %}
<link rel="stylesheet" href="{% static 'catalog/css/body.css' %}" type="text/css">
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.13.4/dist/bootstrap-table.min.css">
<script src="https://unpkg.com/bootstrap-table@1.13.4/dist/bootstrap-table.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.6.2/core.min.js"></script>
{% endblock %}
{% block messages %} {% block messages %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i> <i class="fa fa-envelope-o"></i>
<span class="label label-success">4</span> <span class="label label-success">4</span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="header">You have 4 messages</li> <li class="header">You have 4 messages</li>
<li> <li>
<!-- inner menu: contains the actual data --> <!-- inner menu: contains the actual data -->
...@@ -44,14 +39,14 @@ ...@@ -44,14 +39,14 @@
</ul> </ul>
</li> </li>
<li class="footer"><a href="#">See All Messages</a></li> <li class="footer"><a href="#">See All Messages</a></li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block notifications %} {% block notifications %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i> <i class="fa fa-bell-o"></i>
<span class="label label-warning">10</span> <span class="label label-warning">10</span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li class="header">You have 10 notifications</li> <li class="header">You have 10 notifications</li>
<li> <li>
<!-- inner menu: contains the actual data --> <!-- inner menu: contains the actual data -->
...@@ -66,14 +61,14 @@ ...@@ -66,14 +61,14 @@
</ul> </ul>
</li> </li>
<li class="footer"><a href="#">View all</a></li> <li class="footer"><a href="#">View all</a></li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block tasks %} {% block tasks %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-flag-o"></i> <i class="fa fa-flag-o"></i>
<span class="label label-danger">9</span> <span class="label label-danger">9</span>
</a> </a>
<ul c{% load static %}lass="dropdown-menu"> <ul c{% load static %}lass="dropdown-menu">
<li class="header">You have 9 tasks</li> <li class="header">You have 9 tasks</li>
<li> <li>
<!-- inner menu: contains the actual data --> <!-- inner menu: contains the actual data -->
...@@ -98,10 +93,10 @@ ...@@ -98,10 +93,10 @@
<li class="footer"> <li class="footer">
<a href="#">View all tasks</a> <a href="#">View all tasks</a>
</li> </li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block sidebar %} {% block sidebar %}
<div class="form-group"> <div class="form-group">
<br> <br>
<ul class="sidebar-menu" data-widget="tree"> <ul class="sidebar-menu" data-widget="tree">
<li> <li>
...@@ -114,23 +109,24 @@ ...@@ -114,23 +109,24 @@
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<!-- form-group--> <!-- form-group-->
{% endblock %} {% endblock %}
{% block user %} {% block user %}
{% include "user_button.html" %} {% include "user_button.html" %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<!-- Content Wrapper. Contains page content --> <!-- Content Wrapper. Contains page content -->
<!-- Main content --> <!-- Main content -->
<div id="reportPage" class="wrapper" style="background-color: #ecf0f5"> <div id="reportPage" class="wrapper" style="background-color: #ecf0f5; display: none">
<!-- Content Wrapper. Contains page content --> <!-- Content Wrapper. Contains page content -->
<!-- Main content --> <!-- Main content -->
<section class="content"> <section class="content">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">Reports</div> <div class="panel-heading">Reports</div>
<div class="panel-body"> <div class="panel-body" id="mytable">
<table data-toggle="table" class="table table-hover table-bordered"> <table data-toggle="table" class="table table-hover table-bordered">
<thead> <thead>
<th>Process</th> <th>Process</th>
...@@ -138,36 +134,45 @@ ...@@ -138,36 +134,45 @@
<th>Start Date</th> <th>Start Date</th>
<th>End Date</th> <th>End Date</th>
<!--th>Clouds %</th--> <!--th>Clouds %</th-->
<th>Progress %</th>
<th>Estimated Size</th> <th>Estimated Size</th>
<th>Actions</th> <th>Actions</th>
</thead> </thead>
<tbody> <tbody id="table_body">
{% for product in productList%} {% for product in productList %}
<tr> <tr>
<td>{{product.process}}</td> <td>{{ product.process }}</td>
<td>{{product.purchase_date}}</td> <td>{{ product.purchase_date }}</td>
<td>{{product.startDate}}</td> <td>{{ product.startDate }}</td>
<td>{{product.endDate}}</td> <td>{{ product.endDate }}</td>
<!--td>{{product.clouds}} %</td--> <!--td>{{product.clouds}} %</td-->
<td>{{ product.size }}</td>
<td class="text-center"> <td class="text-center">
<div class="progress"> <div class="progress" id="main_progess{{ product.purchase_id }}"
<div role="progressbar" aria-valuenow="{{product.progress}}" {% if product.progress == 100 %} class="hidden" {% endif %}>
<div id="progress_bar{{ product.purchase_id }}" role="progressbar"
aria-valuenow="{{ product.progress }}"
{% if product.progress == 100 %} {% if product.progress == 100 %}
class="progress-bar-success" class="progress-bar progress-bar-success progress-bar-striped"
{% else %} {% else %}
class="progress-bar" class="progress-bar progress-bar-warning progress-bar-striped active"
{% endif %} {% endif %}
aria-valuemin="0" aria-valuemin="0"
aria-valuemax="100" style="width:{{product.progress}}%"> aria-valuemax="100" style="width:{{ product.progress }}%">
<p class="text-center" style="color: #0a0a0a">{{product.progress}} % </p> <p class="text-center" style="color: #0a0a0a"
id="progess_value{{ product.purchase_id }}">
{% if product.progress == 100 %}
100 %
{% else %}
{{ product.progress }} %
{% endif %}
</p>
</div> </div>
</div> </div>
</td> <div id="action_buttons{{ product.purchase_id }}" {% if product.progress != 100 %}
<td>{{product.size}}</td> class="hidden" {% endif %}>
<td class="text-center"> <a id="view_report{{ product.purchase_id }}" title="View Report"
<a title="View Report" {% if product.progress == 100 %} {% if product.progress == 100 %}
href="{{ BASE_URL }}/reports/T15QZD_sclData/{{product.purchase_id}}" href="{{ BASE_URL }}/reports/T15QZD_sclData/{{ product.purchase_id }}"
{% else %} {% else %}
href="#" href="#"
disabled disabled
...@@ -176,15 +181,19 @@ ...@@ -176,15 +181,19 @@
</a> </a>
<a title="Download zip" {% if product.progress == 100 %} <a title="Download zip" {% if product.progress == 100 %}
href="#" href="#"
disabled
{% else %} {% else %}
href="#" href="#"
disabled disabled
{% endif %} class="btn btn-warning"> {% endif %} class="btn btn-warning">
<i class="fa fa-file-zip-o"></i> <i class="fa fa-file-zip-o"></i>
</a> </a>
<a title="View Log" href="#" class="btn btn-info" onclick="openmodal('{{product.log_info}}')"> <!--a title="View Log" href="#" class="btn btn-info"
onclick="openmodal('{{ product.log_info }}')">
<i class="fa fa-file-text"></i> <i class="fa fa-file-text"></i>
</a> </a-->
</div>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -208,49 +217,19 @@ ...@@ -208,49 +217,19 @@
{% else %} {% else %}
<li class="disabled"><span>&raquo;</span></li> <li class="disabled"><span>&raquo;</span></li>
{% endif %} {% endif %}
<li class="disabled"><span>Page {{ productList.number }} of {{ productList.paginator.num_pages }}.</span></li> <li class="disabled">
<span>Page {{ productList.number }} of {{ productList.paginator.num_pages }}.</span></li>
</ul> </ul>
</div> </div>
</div> </div>
</section> </section>
<!-- /.content --> <!-- /.content -->
</div> </div>
<!-- Footer -->
<footer class=" page-footer font-small special-color-dark pt-5" style="bottom: 0; position: absolute"> <!-- Footer -->
<footer class=" page-footer font-small special-color-dark pt-5" style="bottom: 0; position: absolute">
<!-- Footer Elements --> <!-- Footer Elements -->
<div class="container"> <div class="container">
<!-- Social buttons
<ul class="list-unstyled list-inline text-center">
<li class="list-inline-item">
<a class="btn-floating btn-fb mx-1">
<i class="fa fa-faceboo"> </i>
</a>
</li>
<li class="list-inline-item">
<a class="btn-floating btn-tw mx-1">
<i class="fa fa-twitter"> </i>
</a>
</li>
<li class="list-inline-item">
<a class="btn-floating btn-gplus mx-1">
<i class="fa fa-google-plus"> </i>
</a>
</li>
<li class="list-inline-item">
<a class="btn-floating btn-li mx-1">
<i class="fa fa-linkedin"> </i>
</a>
</li>
<li class="list-inline-item">
<a class="btn-floating btn-dribbble mx-1">
<i class="fa fa-dribbble"> </i>
</a>
</li>
</ul>
<!-- Social buttons -->
</div> </div>
<!-- Footer Elements --> <!-- Footer Elements -->
...@@ -260,10 +239,10 @@ ...@@ -260,10 +239,10 @@
</div> </div>
<!-- Copyright --> <!-- Copyright -->
</footer> </footer>
<!-- /.Footer --> <!-- /.Footer -->
<!-- Modals --> <!-- Modals -->
<div id="myModal" class="modal fade" role="dialog"> <div id="myModal" class="modal fade" role="dialog">
<div class="modal-dialog"> <div class="modal-dialog">
<!-- Modal content--> <!-- Modal content-->
...@@ -281,16 +260,10 @@ ...@@ -281,16 +260,10 @@
</div> </div>
</div> </div>
</div> </div>
<!-- /.modals --> <!-- /.modals -->
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script> <script src="{% static 'reports/js/scripts.js' %}"></script>
function openmodal(info) { {% endblock %}
info2 = info.split(";"); \ No newline at end of file
$("#myModal").modal();
$("#log_info").append(info2);
}
</script>
{% endblock%}
\ No newline at end of file
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
from django.test import TestCase from django.test import TestCase
# Create your tests here. # Create your tests here.
from celery import shared_task
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
@shared_task
def xsum(numbers):
return sum(numbers)
...@@ -7,5 +7,6 @@ urlpatterns = [ ...@@ -7,5 +7,6 @@ urlpatterns = [
url(r'^(?P<report>[\w\-]+)/(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'), url(r'^(?P<report>[\w\-]+)/(?P<purchase_id>(\d+))$', views.report_L2ASCL, name='report'),
url(r'^$', views.Reports, name='reports'), url(r'^$', views.Reports, name='reports'),
url(r'^Reload$', views.Reload, name='Reload'),
] ]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
import io import json
import os
# Create your views here.
from collections import OrderedDict
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.http import FileResponse from django.http import HttpResponse, Http404
from reportlab.pdfgen import canvas from django.shortcuts import render, render_to_response
from django.shortcuts import render
# Create your views here. from GeoInt_SIDT.tasks import add
from collections import OrderedDict from catalog.models import Purchase
import json from GeoInt_SIDT.tasks import *
import os
# ------------------------------------------------------------------------------- # -------------------------------------------------------------------------------
from reportlab.pdfgen import canvas
from GeoInt_SIDT import settings
from catalog.models import CartProduct, Purchase, Search
########### lee archivo de configuración ################ ########### lee archivo de configuración ################
dirname = os.path.dirname(__file__) dirname = os.path.dirname(__file__)
...@@ -28,13 +25,14 @@ with open(configfile, 'r') as f: ...@@ -28,13 +25,14 @@ with open(configfile, 'r') as f:
USERS_PATH = config['PATHS']['PATH_USERS'] USERS_PATH = config['PATHS']['PATH_USERS']
########################################################### ###########################################################
def report_L2ASCL(request, report,purchase_id): def report_L2ASCL(request, report, purchase_id):
#image_path =USERS_PATH + request.user.email+"/"+purchase_id+"/"+"out/T15QZD/TCI/" # image_path =USERS_PATH + request.user.email+"/"+purchase_id+"/"+"out/T15QZD/TCI/"
image_path =request.user.email+"/"+purchase_id+"/"+"out/T15QZD/TCI/" image_path = request.user.email + "/" + purchase_id + "/" + "out/T15QZD/TCI/"
with open(USERS_PATH + request.user.email+"/"+purchase_id+"/" + report + ".json") as f: with open(USERS_PATH + request.user.email + "/" + purchase_id + "/" + report + ".json") as f:
json_data = OrderedDict(json.load(f)) json_data = OrderedDict(json.load(f))
graphData = dict() graphData = dict()
graphData['type'] = "line" graphData['type'] = "line"
...@@ -46,7 +44,6 @@ def report_L2ASCL(request, report,purchase_id): ...@@ -46,7 +44,6 @@ def report_L2ASCL(request, report,purchase_id):
labels = set() labels = set()
for d in json_data: for d in json_data:
labels |= set(json_data[d].keys()) labels |= set(json_data[d].keys())
print(labels)
labels.remove('date') labels.remove('date')
labelNames = [ labelNames = [
...@@ -88,9 +85,11 @@ def report_L2ASCL(request, report,purchase_id): ...@@ -88,9 +85,11 @@ def report_L2ASCL(request, report,purchase_id):
def Reports(request): def Reports(request):
progress = 0 progress = 0
productList=[] productList = []
size = 0 size = 0
product_list = Purchase.objects.values('id','productList','aggreg_date','search__clouds' ,'search__startDate', 'search__endDate','search__process_id__name').filter(user_id=request.user.id, purchased=1) product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds', 'search__startDate',
'search__endDate', 'search__process_id__name').filter(
user_id=request.user.id, purchased=1)
for producto in product_list: for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log" log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
...@@ -108,21 +107,19 @@ def Reports(request): ...@@ -108,21 +107,19 @@ def Reports(request):
if 'Finalizing...' in open(log_info).read(): if 'Finalizing...' in open(log_info).read():
progress = 100 progress = 100
with open(log_info, 'r') as myfile: with open(log_info, 'r') as myfile:
log = myfile.read().replace('\n', '') log = myfile.read().replace('\n', '')
for p in json.loads(producto['productList']): for p in json.loads(producto['productList']):
size = size + float(p['info']['size'][:-3]) size = size + float(p['info']['size'][:-3])
if size > 1000: if size > 1000:
size2 = size/1000 size2 = size / 1000
final_size = str(round(size2,2)) + " GB" final_size = str(round(size2, 2)) + " GB"
else: else:
final_size = str(round(size,2))+ " MB" final_size = str(round(size, 2)) + " MB"
productList.append({ productList.append({
"process" : producto['search__process_id__name'], "process": producto['search__process_id__name'],
"purchase_date": producto['aggreg_date'], "purchase_date": producto['aggreg_date'],
"startDate": producto['search__startDate'], "startDate": producto['search__startDate'],
"endDate": producto['search__endDate'], "endDate": producto['search__endDate'],
...@@ -140,6 +137,45 @@ def Reports(request): ...@@ -140,6 +137,45 @@ def Reports(request):
page = request.GET.get('page') page = request.GET.get('page')
productList = paginator.get_page(page) productList = paginator.get_page(page)
return render(request, 'Reports.html', {"productList": productList})
return render(request, 'Reports.html', {"productList": productList}) # ------------------------------------------------------------------------
def Reload(request):
if request.is_ajax():
progress = 0
productList2 = []
product_list = Purchase.objects.values('id', 'productList', 'aggreg_date', 'search__clouds',
'search__startDate', 'search__endDate',
'search__process_id__name').filter(user_id=request.user.id, purchased=1)
for producto in product_list:
log_info = USERS_PATH + request.user.email + "/" + str(producto['id']) + "/L2ASCL_AreaProcessing.log"
#####################################################
# progress bar #
#####################################################
if 'Linking Products...' in open(log_info).read():
progress = 20
if 'Merging Images...' in open(log_info).read():
progress = 40
if 'Deleting Images...' in open(log_info).read():
progress = 50
if 'Extracting SCL information...' in open(log_info).read():
progress = 60
if 'Finalizing...' in open(log_info).read():
progress = 100
productList2.append({
"purchase_id": producto['id'],
"progress": progress,
})
return HttpResponse(json.dumps(productList2))
else:
raise Http404
# ------------------------------------------------------------------------
# def tareas():
# result = add.apply_async((2, 1), countdown=3)
# result.get()
# return render_to_response('reports_table.html', {"result": result.get()})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment