Alters measurement function to use more efficient data structure

This commit is contained in:
Patrick McDonagh
2017-04-17 11:12:38 -05:00
parent c58aacc502
commit 9c84de53c4
5 changed files with 122 additions and 87 deletions

View File

@@ -11,71 +11,6 @@ def json_lastcard(request):
return get_latest_card(request) return get_latest_card(request)
@view_config(route_name="json_valuesbetween", renderer="prettyjson")
@view_config(route_name="json_valuesbetween_wparams", renderer="prettyjson")
def json_valuesbetween(request):
end = datetime.now()
try: # Attempt to get a value from the request.
end = request.matchdict['enddt']
end = end.replace("T", " ")
end = datetime.strptime(end, "%Y-%m-%d %H:%M:%S.%fZ")
except KeyError:
pass
start = end - timedelta(days=2)
try: # Attempt to get a value from the request.
start = request.matchdict['startdt']
start = start.replace("T", " ")
start = datetime.strptime(start, "%Y-%m-%d %H:%M:%S.%fZ")
except KeyError:
pass
tag_data = []
grouped_tags = request.db['wellData'].aggregate([
{
'$match': {"timestamp": {"$gt": start, "$lte": end}}
},
{
'$sort': {"tagname": 1, "timestamp": 1}
},
{
'$group': {
'_id': "$tagname",
'timestamps': {'$push': "$timestamp"},
'currentValues': {'$push': "$currentValue"}
}
}
])
for t in grouped_tags:
tag_data.append({"tagname": t['_id'], "timestamps": list(map(lambda a: a.strftime("%Y-%m-%d %H:%M:%S.%fZ"), t['timestamps'])), "currentValues": t['currentValues']})
return {'values': tag_data, 'start': start, 'end': end}
@view_config(route_name="json_valuesdaterange", renderer="prettyjson")
def json_valuesdaterange(request):
date_limits = list(request.db['wellData'].aggregate([
{"$group": {
"_id": 'null',
"last": {"$max": "$timestamp"},
"first": {"$min": "$timestamp"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_singlevaluedaterange", renderer="prettyjson")
def json_singlevaluedaterange(request):
date_limits = list(request.db['wellData'].aggregate([
{"$match": {"tagname": request.matchdict['tagname']}},
{"$group": {
"_id": 'null',
"last": {"$max": "$timestamp"},
"first": {"$min": "$timestamp"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_runstatusnow", renderer="prettyjson") @view_config(route_name="json_runstatusnow", renderer="prettyjson")
def json_runstatusnow(request): def json_runstatusnow(request):

View File

@@ -140,6 +140,30 @@ def get_grouped_measurements_between(request, start_datetime, end_datetime, tagn
@view_config(route_name='values_all', renderer="templates/valuesall.jinja2") @view_config(route_name='values_all', renderer="templates/valuesall.jinja2")
def values_page(request):
latest_tag_values = []
latesttag_agg = request.db['measurements'].aggregate([
{'$sort': {'dateStored': 1}},
{
'$group': {
'_id': '$tagname',
'currentValue': {'$last': '$currentValue'},
'units': {'$last': '$units'},
'maxValue': {'$last': '$maxValue'},
'minValue': {'$last': '$minValue'},
'totalValue': {'$last': '$totalValue'},
'averageValue': {'$last': '$averageValue'},
'useTotal': {'$last': '$useTotal'},
'useAverage': {'$last': '$useAverage'}
}
}
])
for t in latesttag_agg:
latest_tag_values.append(t)
return {'navgroup': 'values', "current_values": latest_tag_values}
@view_config(route_name='json_values_all', renderer='prettyjson') @view_config(route_name='json_values_all', renderer='prettyjson')
def values_all(request): def values_all(request):
end = datetime.now(tz=pytz.utc) end = datetime.now(tz=pytz.utc)
@@ -158,8 +182,28 @@ def values_all(request):
except KeyError: except KeyError:
pass pass
latest_tag_values = []
latesttag_agg = request.db['measurements'].aggregate([
{'$sort': {'dateStored': 1}},
{
'$group': {
'_id': '$tagname',
'currentValue': {'$last': '$currentValue'},
'units': {'$last': '$units'},
'maxValue': {'$last': '$maxValue'},
'minValue': {'$last': '$minValue'},
'totalValue': {'$last': '$totalValue'},
'averageValue': {'$last': '$averageValue'},
'useTotal': {'$last': '$useTotal'},
'useAverage': {'$last': '$useAverage'}
}
}
])
for t in latesttag_agg:
latest_tag_values.append(t)
all_values = get_grouped_measurements_between(request, start, end) all_values = get_grouped_measurements_between(request, start, end)
return {'navgroup': 'values', 'current_tag_values': all_values} return {'navgroup': 'values', 'values': all_values, "current_values": latest_tag_values}
@view_config(route_name="json_singlevaluebetween", renderer="prettyjson") @view_config(route_name="json_singlevaluebetween", renderer="prettyjson")
@@ -183,3 +227,51 @@ def json_singlevaluebetween(request):
all_values = get_grouped_measurements_between(request, start, end, tagname=request.matchdict['tagname']) all_values = get_grouped_measurements_between(request, start, end, tagname=request.matchdict['tagname'])
return {'tag': all_values, 'start': start, 'end': end, 'tagname': request.matchdict['tagname']} return {'tag': all_values, 'start': start, 'end': end, 'tagname': request.matchdict['tagname']}
@view_config(route_name="json_valuesbetween", renderer="prettyjson")
@view_config(route_name="json_valuesbetween_wparams", renderer="prettyjson")
def json_valuesbetween(request):
end = datetime.now(tz=pytz.utc)
try: # Attempt to get a value from the request.
end = request.matchdict['enddt']
end = end.replace("T", " ")
end = pytz.utc.localize(datetime.strptime(end, "%Y-%m-%d %H:%M:%S.%fZ"))
except KeyError:
pass
start = end - timedelta(days=2)
try: # Attempt to get a value from the request.
start = request.matchdict['startdt']
start = start.replace("T", " ")
start = pytz.utc.localize(datetime.strptime(start, "%Y-%m-%d %H:%M:%S.%fZ"))
except KeyError:
pass
tag_data = get_grouped_measurements_between(request, start, end)
return {'values': tag_data, 'start': start, 'end': end}
@view_config(route_name="json_valuesdaterange", renderer="prettyjson")
def json_valuesdaterange(request):
date_limits = list(request.db['measurements'].aggregate([
{"$group": {
"_id": 'null',
"last": {"$max": "$dateStored"},
"first": {"$min": "$dateStored"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_singlevaluedaterange", renderer="prettyjson")
def json_singlevaluedaterange(request):
date_limits = list(request.db['measurements'].aggregate([
{"$match": {"tagname": request.matchdict['tagname']}},
{"$group": {
"_id": 'null',
"last": {"$max": "$dateStored"},
"first": {"$min": "$dateStored"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}

View File

@@ -86,23 +86,30 @@ function drawChart(data){
var graph_data = [] ; var graph_data = [] ;
var json_data = data.values; var json_data = data.values;
var ctx = document.getElementById("valueChart"); var ctx = document.getElementById("valueChart");
for (var i = 0; i < json_data.length; i++){
var color_index = 0;
for (x in data.values){
var tagdata = data.values[x];
var newObj = { var newObj = {
label: json_data[i].tagname, label: x,
fill: false, fill: false,
data: [], data: [],
lineTension: 0.05, lineTension: 0.05,
borderColor: color_scale[i % color_scale.length], borderColor: color_scale[color_index % color_scale.length],
pointRadius: 2 pointRadius: 2
} };
for(var j = 0; j < json_data[i].timestamps.length; j++){
for (var j = 0; j < tagdata.values.length; j++){
newObj.data.push({ newObj.data.push({
x: json_data[i].timestamps[j], x: tagdata.values[j].timestamp,
y: json_data[i].currentValues[j] y: tagdata.values[j].tagvalue
}); });
} }
graph_data.push(newObj); graph_data.push(newObj);
color_index++;
} }
scatterChart = new Chart(ctx, { scatterChart = new Chart(ctx, {
type: 'line', type: 'line',
responsive: true, responsive: true,
@@ -133,7 +140,6 @@ function drawSingleGraph(data){
var tag = data.tag[data.tagname]; var tag = data.tag[data.tagname];
console.log(tag); console.log(tag);
console.log(tag.values.length);
var graph_data = []; var graph_data = [];
var ctx = document.getElementById("myChart"); var ctx = document.getElementById("myChart");
@@ -149,7 +155,7 @@ function drawSingleGraph(data){
} }
for (var i = 0; i < tag.values.length; i++){ for (var i = 0; i < tag.values.length; i++){
currentValues.data.push({x: tag.values.timestamp, y: tag.values.tagvalue}); currentValues.data.push({x: tag.values[i].timestamp, y: tag.values[i].tagvalue});
} }
graph_data.push(currentValues) graph_data.push(currentValues)
@@ -165,7 +171,7 @@ function drawSingleGraph(data){
} }
for (var i = 0; i < tag.maxes.length; i++){ for (var i = 0; i < tag.maxes.length; i++){
maxValues.data.push({x: tag.maxes.timestamp, y: tag.maxes.maxValue}); maxValues.data.push({x: tag.maxes[i].timestamp, y: tag.maxes[i].maxValue});
} }
graph_data.push(maxValues) graph_data.push(maxValues)
@@ -181,7 +187,7 @@ function drawSingleGraph(data){
} }
for (var i = 0; i < tag.mins.length; i++){ for (var i = 0; i < tag.mins.length; i++){
minValues.data.push({x: tag.mins.timestamp, y: tag.mins.maxValue}); minValues.data.push({x: tag.mins[i].timestamp, y: tag.mins[i].maxValue});
} }
graph_data.push(minValues) graph_data.push(minValues)
@@ -197,7 +203,7 @@ function drawSingleGraph(data){
} }
for (var i = 0; i < tag.averages.length; i++){ for (var i = 0; i < tag.averages.length; i++){
averageValues.data.push({x: tag.averages.timestamp, y: tag.averages.maxValue}); averageValues.data.push({x: tag.averages[i].timestamp, y: tag.averages[i].maxValue});
} }
graph_data.push(averageValues) graph_data.push(averageValues)
@@ -213,12 +219,14 @@ function drawSingleGraph(data){
} }
for (var i = 0; i < tag.totals.length; i++){ for (var i = 0; i < tag.totals.length; i++){
totalValues.data.push({x: tag.totals.timestamp, y: tag.totals.maxValue}); totalValues.data.push({x: tag.totals[i].timestamp, y: tag.totals[i].maxValue});
} }
graph_data.push(totalValues) graph_data.push(totalValues)
color_index++; color_index++;
console.log(graph_data);
scatterChart = new Chart(ctx, { scatterChart = new Chart(ctx, {
type: 'line', type: 'line',
data: { data: {

View File

@@ -47,6 +47,8 @@ $.ajax({
success: drawSingleSlider success: drawSingleSlider
}); });
console.log("/json/values/tag/" + tagName + "/between/" + start + "/" + end);
$.ajax({ $.ajax({
dataType: 'json', dataType: 'json',
url: "/json/values/tag/" + tagName + "/between/" + start + "/" + end, url: "/json/values/tag/" + tagName + "/between/" + start + "/" + end,

View File

@@ -15,19 +15,17 @@
<th>Min</th> <th>Min</th>
<th>Average</th> <th>Average</th>
<th>Total</th> <th>Total</th>
<th>Last Stored</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for t in current_tag_values %} {% for t in current_values %}
<tr> <tr>
<td><a href="/values/tag/{{t._id}}">{{t._id}}</a></td> <td><a href="/values/tag/{{t._id}}">{{t._id}}</a></td>
<td>{{t.value | round(3)}}</td> <td>{{t.currentValue | round(3)}} {{t.units}}</td>
<td>{{t.max | round(3)}}</td> <td>{{t.maxValue | round(3)}} {{t.units}}</td>
<td>{{t.min | round(3)}}</td> <td>{{t.minValue | round(3)}} {{t.units}}</td>
<td>{{t.average | round(3)}}</td> <td>{% if t.useAverage %}{{t.averageValue | round(3)}} {{t.units}}{% endif %}</td>
<td>{{t.total | round(3)}}</td> <td>{% if t.useTotal %}{{t.totalValue | round(3)}} {{t.units}}{% endif %}</td>
<td>{{t.timestamp | datetime('medium')}}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>