|
@@ -1,19 +1,10 @@
|
|
|
-import io, os
|
|
|
-import re
|
|
|
import time
|
|
|
import math
|
|
|
-import copy
|
|
|
import json
|
|
|
|
|
|
-from threading import Thread
|
|
|
-from multiprocessing import Process, cpu_count, Queue
|
|
|
-
|
|
|
from django.core.urlresolvers import reverse
|
|
|
-from django.shortcuts import render, render_to_response
|
|
|
-from django.template import RequestContext
|
|
|
from django.http import HttpResponseRedirect, HttpResponse
|
|
|
from django.contrib import messages
|
|
|
-from django.views.decorators.cache import cache_page
|
|
|
from django.core.cache import cache
|
|
|
|
|
|
from django.conf import settings
|
|
@@ -22,40 +13,27 @@ from mongoengine import ValidationError
|
|
|
|
|
|
from bson.objectid import ObjectId
|
|
|
|
|
|
+from multiprocessing import Process
|
|
|
+
|
|
|
from .models import SpriteMetaData
|
|
|
from .service import SliceGenerator, SubvolumeCreator
|
|
|
-from ..models import Volume, Texture, TextureInfo, RawFrame
|
|
|
+from ..models import Volume
|
|
|
from ..views import handleException
|
|
|
|
|
|
from visualization.mongodb import gridfshelper
|
|
|
|
|
|
-from loadtests import facade as loadtests
|
|
|
-
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
-from PIL import Image
|
|
|
-from skimage import img_as_ubyte
|
|
|
-import numpy as np
|
|
|
-
|
|
|
import logging
|
|
|
|
|
|
-import pdb
|
|
|
-
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
+
|
|
|
def generateslice(request, id):
|
|
|
if request.method != 'POST':
|
|
|
messages.error(request, 'no post')
|
|
|
return HttpResponseRedirect(reverse('volumes:show', args=(id,)))
|
|
|
|
|
|
- data = request.POST
|
|
|
- try:
|
|
|
- if data['destSize'] != '':
|
|
|
- size = int(data['destSize'])
|
|
|
- except ValueError:
|
|
|
- messages.error(request, 'please provide a valid value(s) for "destSize"')
|
|
|
- return HttpResponseRedirect(reverse('volumes:show', args=(id,)))
|
|
|
-
|
|
|
try:
|
|
|
volume = Volume.objects(id=id)[0]
|
|
|
except (IndexError, ValidationError) as e:
|
|
@@ -74,7 +52,7 @@ def generateslice(request, id):
|
|
|
return HttpResponseRedirect(reverse('volumes:show', args=(id,)))
|
|
|
|
|
|
|
|
|
-def getSubvolume(request, id, x, y, z, t, depth, testId = None):
|
|
|
+def getSubvolume(request, id, x, y, z, t, depth, testId=None):
|
|
|
starttime = time.time()
|
|
|
try:
|
|
|
volume = Volume.objects(id=id)[0]
|
|
@@ -96,27 +74,27 @@ def getSubvolume(request, id, x, y, z, t, depth, testId = None):
|
|
|
|
|
|
if testId is None:
|
|
|
''' are there any sprites within 30pixels around the point ? '''
|
|
|
- spriteMetaDatas = SpriteMetaData.objects(x__gte=(x-sizex/10),
|
|
|
- x__lte=(x+sizex/10),
|
|
|
- y__gte=(y-sizey/10),
|
|
|
- y__lte=(y+sizey/10),
|
|
|
- z__gte=(z-sizez/10),
|
|
|
- z__lte=(z+sizez/10),
|
|
|
- depth=depth,
|
|
|
- volumeId=id)
|
|
|
+ spriteMetaDatas = SpriteMetaData.objects(
|
|
|
+ x__gte=(x-sizex/10),
|
|
|
+ x__lte=(x+sizex/10),
|
|
|
+ y__gte=(y-sizey/10),
|
|
|
+ y__lte=(y+sizey/10),
|
|
|
+ z__gte=(z-sizez/10),
|
|
|
+ z__lte=(z+sizez/10),
|
|
|
+ depth=depth,
|
|
|
+ volumeId=id
|
|
|
+ )
|
|
|
|
|
|
''' found a generated sprite in the near of the clicked point, just using it '''
|
|
|
if len(spriteMetaDatas) > 0:
|
|
|
for spriteMetaData in spriteMetaDatas:
|
|
|
- print('spritemetadatas found')
|
|
|
- spritefilename = '%s.%s' %(str(spriteMetaData.spriteId), spriteMetaData.format)
|
|
|
+ spritefilename = '%s.%s' % (str(spriteMetaData.spriteId), spriteMetaData.format)
|
|
|
if cache.get(spritefilename) is not None:
|
|
|
return HttpResponse(spriteMetaData.jsonInformation, content_type='json')
|
|
|
else:
|
|
|
spriteMetaData.delete()
|
|
|
''' end testId is None '''
|
|
|
|
|
|
-
|
|
|
spriteId = ObjectId()
|
|
|
format = 'jpeg'
|
|
|
|
|
@@ -146,7 +124,7 @@ def getSubvolume(request, id, x, y, z, t, depth, testId = None):
|
|
|
|
|
|
minWidthHalf = int(math.floor(minWidth / 2))
|
|
|
|
|
|
- numberOfLayers = minWidth # we want it to be cube
|
|
|
+ numberOfLayers = minWidth # we want it to be cube
|
|
|
sqrtZ = int(math.floor(math.sqrt(numberOfLayers)))
|
|
|
numberOfLayers = int(math.pow(sqrtZ, 2))
|
|
|
|
|
@@ -185,32 +163,33 @@ def getSubvolume(request, id, x, y, z, t, depth, testId = None):
|
|
|
else:
|
|
|
z = z - numberOfLayersHalf
|
|
|
|
|
|
- print('x, y, z, minWidth, sqrtZ', str(x), str(y), str(z), str(minWidth), str(sqrtZ), str(numberOfLayers), str(t));
|
|
|
-
|
|
|
- #creatorThread = SubvolumeCreator.SubvolumeCreator(volume.id, x, y, z, t, minWidth, sqrtZ, numberOfLayers, spriteId, format, starttime, testId)
|
|
|
- #creatorThread.start()
|
|
|
+ '''
|
|
|
+ creatorThread = SubvolumeCreator.SubvolumeCreator(volume.id, x, y, z, t, minWidth, sqrtZ, numberOfLayers, spriteId, format, starttime, testId)
|
|
|
+ creatorThread.start()
|
|
|
+ '''
|
|
|
|
|
|
requestedRes = int(request.session.get('requestedRes', 2048))
|
|
|
if requestedRes is None or requestedRes < 2048:
|
|
|
requestedRes = 2048
|
|
|
|
|
|
- creatorProcess = Process(target=SubvolumeCreator.subvolumeCreator,
|
|
|
- args=(
|
|
|
- volume.id,
|
|
|
- x,
|
|
|
- y,
|
|
|
- z,
|
|
|
- t,
|
|
|
- minWidth,
|
|
|
- sqrtZ,
|
|
|
- numberOfLayers,
|
|
|
- spriteId,
|
|
|
- format,
|
|
|
- requestedRes,
|
|
|
- starttime,
|
|
|
- testId,
|
|
|
- )
|
|
|
- )
|
|
|
+ creatorProcess = Process(
|
|
|
+ target=SubvolumeCreator.subvolumeCreator,
|
|
|
+ args=(
|
|
|
+ volume.id,
|
|
|
+ x,
|
|
|
+ y,
|
|
|
+ z,
|
|
|
+ t,
|
|
|
+ minWidth,
|
|
|
+ sqrtZ,
|
|
|
+ numberOfLayers,
|
|
|
+ spriteId,
|
|
|
+ format,
|
|
|
+ requestedRes,
|
|
|
+ starttime,
|
|
|
+ testId,
|
|
|
+ )
|
|
|
+ )
|
|
|
creatorProcess.start()
|
|
|
|
|
|
infoObject = {}
|
|
@@ -232,20 +211,22 @@ def getSubvolume(request, id, x, y, z, t, depth, testId = None):
|
|
|
|
|
|
return HttpResponse(jsonString, content_type='json')
|
|
|
|
|
|
+
|
|
|
def getSubvolumeSprite(request, id, spriteId):
|
|
|
return getSubvolumeFromCache(request, id, spriteId)
|
|
|
- #return getSubvolumeFromGridFS(request, id, spriteId)
|
|
|
+ '''return getSubvolumeFromGridFS(request, id, spriteId)'''
|
|
|
+
|
|
|
|
|
|
def getSubvolumeFromGridFS(request, id, spriteId):
|
|
|
filename = spriteId + '.jpeg'
|
|
|
- handle = None
|
|
|
if gridfshelper.fileexists(filename):
|
|
|
handle = gridfshelper.openfile(spriteId + '.jpeg')
|
|
|
+ return HttpResponse(handle.read(), content_type='image/jpeg')
|
|
|
else:
|
|
|
return HttpResponse(None, content_type='image/jpeg')
|
|
|
|
|
|
+
|
|
|
def getSubvolumeFromCache(request, id, spriteId):
|
|
|
- filename = spriteId + '.jpeg'
|
|
|
handle = cache.get(spriteId + '.jpeg')
|
|
|
if handle is None:
|
|
|
response = HttpResponse(None, content_type='image/jpeg')
|
|
@@ -257,17 +238,18 @@ def getSubvolumeFromCache(request, id, spriteId):
|
|
|
|
|
|
|
|
|
def subvolumeAvailable(request, id, spriteId):
|
|
|
- #jsonstring = json.dumps({ 'available' : gridfshelper.fileexists(spriteId + '.jpeg') })
|
|
|
- jsonstring = json.dumps({ 'available' : cache.get(spriteId + '.jpeg') is not None })
|
|
|
+ '''jsonstring = json.dumps({ 'available' : gridfshelper.fileexists(spriteId + '.jpeg') })'''
|
|
|
+ jsonstring = json.dumps({'available': cache.get(spriteId + '.jpeg') is not None})
|
|
|
return HttpResponse(jsonstring, content_type='json')
|
|
|
|
|
|
-def listfiles(request, id, plain = None):
|
|
|
+
|
|
|
+def listfiles(request, id, plain=None):
|
|
|
try:
|
|
|
spriteMetaDatas = SpriteMetaData.objects()
|
|
|
except (IndexError, ValidationError) as e:
|
|
|
return handleException(request, id, e)
|
|
|
print(plain)
|
|
|
- if plain == None:
|
|
|
+ if plain is None:
|
|
|
filenames = []
|
|
|
for spriteMetaData in spriteMetaDatas:
|
|
|
filenames.append(spriteMetaData.spriteId)
|
|
@@ -276,9 +258,10 @@ def listfiles(request, id, plain = None):
|
|
|
|
|
|
print(filenames)
|
|
|
|
|
|
- jsonstring = json.dumps({'files': filenames })
|
|
|
+ jsonstring = json.dumps({'files': filenames})
|
|
|
return HttpResponse(jsonstring, content_type='json')
|
|
|
|
|
|
+
|
|
|
def deletefiles(request, id):
|
|
|
try:
|
|
|
spriteMetaDatas = SpriteMetaData.objects()
|
|
@@ -297,5 +280,11 @@ def deletefiles(request, id):
|
|
|
else:
|
|
|
kept.append(spriteMetaData.spriteId)
|
|
|
|
|
|
- return HttpResponse(json.dumps({'deleted' : deleted, 'kept' : kept, 'minCachingTime(sec)' : minCachingTime.total_seconds()}), content_type='json')
|
|
|
-
|
|
|
+ return HttpResponse(
|
|
|
+ json.dumps({
|
|
|
+ 'deleted': deleted,
|
|
|
+ 'kept': kept,
|
|
|
+ 'minCachingTime(sec)': minCachingTime.total_seconds()
|
|
|
+ }),
|
|
|
+ content_type='json'
|
|
|
+ )
|