+from django.http import HttpResponse
+from rest import error
+import os,json
+import ConfigParser
+import string, random
+
+from portal.models import MeasurementsDB
+
+from manifold.core.query import Query, AnalyzedQuery
+from manifoldapi.manifoldapi import execute_query
+
+from influxdb import InfluxDBClient
+
+def createDatabase(request, slicename):
+ result = {}
+
+ Config = config(request)
+
+ server = Config.get('influxdb', 'server')
+ #port = Config.get('influxdb', 'port', 8086)
+ port = 8086
+ user = Config.get('influxdb', 'user')
+ password = Config.get('influxdb', 'password')
+
+ dbname = slicename
+ dbuser = request.user.username
+ dbpassword = generatePassword()
+
+ query = Query().get('user').filter_by('user_email', '==', dbuser).select('slices')
+ slices = execute_query(request, query)
+
+ if not slicename in slices:
+ result['status'] = 'fail'
+ result['message'] = 'no permissions'
+ return HttpResponse(json.dumps(result), content_type="application/json")
+
+ client = InfluxDBClient(server, port, user, password, dbname)
+
+ try :
+ client.create_database(dbname)
+ except Exception as e:
+ print e
+
+ # Add database user
+ try :
+ client.add_database_user(dbuser, dbpassword)
+ except Exception as e:
+ print e
+
+ # Make user a database admin
+ client.set_database_admin(dbuser)
+
+
+ # Insert an entry in the Influxdb table
+ i = MeasurementsDB(
+ backend = 'influxdb',
+ server = server,
+ port = port,
+ dbname = dbname,
+ dbuser = dbuser,
+ dbpassword = dbpassword
+ )
+ i.save()
+
+
+ result['status'] = 'ok'
+
+ return HttpResponse(json.dumps(result), content_type="application/json")
+
+def infoDatabase(request, slicename):
+ Config = config(request)
+
+ res = MeasurementsDB.objects.get(dbname=slicename, dbuser=request.user.username)
+ result = {
+ 'server' : res.server,
+ 'port' : res.port,
+ 'dbname' : res.dbname,
+ 'dbuser' : res.dbuser,
+ 'dbpassword' : res.dbpassword
+ }
+ return HttpResponse(json.dumps(result), content_type="application/json")
+
+def config(request):
+ Config = ConfigParser.ConfigParser()
+ Config.read(os.getcwd() + "/myslice/measurements.ini")
+
+ if not request.user.is_authenticated :
+ return HttpResponse(json.dumps({'error' : 'not authenticated'}), content_type="application/json")
+
+ #if Config.has_section('influxdb') :
+ if not Config.has_option('influxdb', 'server') :
+ return HttpResponse(json.dumps({'error' : 'server not specified'}), content_type="application/json")
+
+ if not Config.has_option('influxdb', 'user') :
+ return HttpResponse(json.dumps({'error' : 'user not specified'}), content_type="application/json")
+
+ if not Config.has_option('influxdb', 'password') :
+ return HttpResponse(json.dumps({'error' : 'server not specified'}), content_type="application/json")
+
+ return Config
+
+def generatePassword():
+ password_len = 16
+ password = []
+
+ for group in (string.ascii_letters, string.punctuation, string.digits):
+ password += random.sample(group, 3)
+
+ password += random.sample(
+ string.ascii_letters + string.punctuation + string.digits,
+ password_len - len(password))
+
+ random.shuffle(password)
+ password = ''.join(password)
+
+
+ return password
+
+