1 from django.http import HttpResponse
3 import os,json,string,random
4 import logging,ConfigParser
6 from portal.models import MeasurementsDB
8 from manifold.core.query import Query, AnalyzedQuery
9 from manifoldapi.manifoldapi import execute_query
11 logger = logging.getLogger(__name__)
14 from influxdb import InfluxDBClient
16 logger.error('can\'t import InfluxDBClient module')
18 def createDatabase(request, slicename):
21 Config = config(request)
23 server = Config.get('influxdb', 'server')
24 #port = Config.get('influxdb', 'port', 8086)
26 user = Config.get('influxdb', 'user')
27 password = Config.get('influxdb', 'password')
30 dbuser = request.user.username
31 dbpassword = generatePassword()
33 query = Query().get('user').filter_by('user_email', '==', dbuser).select('slices')
34 slices = execute_query(request, query)
36 if not slicename in slices:
37 result['status'] = 'fail'
38 result['message'] = 'no permissions'
39 return HttpResponse(json.dumps(result), content_type="application/json")
41 client = InfluxDBClient(server, port, user, password, dbname)
44 client.create_database(dbname)
45 except Exception as e:
50 client.add_database_user(dbuser, dbpassword)
51 except Exception as e:
54 # Make user a database admin
55 client.set_database_admin(dbuser)
58 # Insert an entry in the Influxdb table
65 dbpassword = dbpassword
70 result['status'] = 'ok'
72 return HttpResponse(json.dumps(result), content_type="application/json")
74 def infoDatabase(request, slicename):
75 Config = config(request)
77 res = MeasurementsDB.objects.get(dbname=slicename, dbuser=request.user.username)
79 'server' : res.server,
81 'dbname' : res.dbname,
82 'dbuser' : res.dbuser,
83 'dbpassword' : res.dbpassword
85 return HttpResponse(json.dumps(result), content_type="application/json")
88 Config = ConfigParser.ConfigParser()
89 Config.read(os.getcwd() + "/myslice/measurements.ini")
91 if not request.user.is_authenticated :
92 return HttpResponse(json.dumps({'error' : 'not authenticated'}), content_type="application/json")
94 #if Config.has_section('influxdb') :
95 if not Config.has_option('influxdb', 'server') :
96 return HttpResponse(json.dumps({'error' : 'server not specified'}), content_type="application/json")
98 if not Config.has_option('influxdb', 'user') :
99 return HttpResponse(json.dumps({'error' : 'user not specified'}), content_type="application/json")
101 if not Config.has_option('influxdb', 'password') :
102 return HttpResponse(json.dumps({'error' : 'server not specified'}), content_type="application/json")
106 def generatePassword():
110 for group in (string.ascii_letters, string.punctuation, string.digits):
111 password += random.sample(group, 3)
113 password += random.sample(
114 string.ascii_letters + string.punctuation + string.digits,
115 password_len - len(password))
117 random.shuffle(password)
118 password = ''.join(password)