def launch(self, demo): """ Update records for demo launches :param demo: name of the launched demo :return: """ try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_launch_statement.bind(( self.today, self.request_timeuuid, demo, self.user, self.form_variables, datetime.datetime.now() )) ) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_demo_launch_statement.bind(( demo, self.request_timeuuid, self.user, self.form_variables, datetime.datetime.now() )) ) except: logger.exception('Database inaccessible!')
def __init__(self, cassandra_cluster, user, endpoint, method, form_variables, get_variables, init_log): self.cassandra_cluster = cassandra_cluster self.user = user # https://datastax-oss.atlassian.net/browse/PYTHON-212 self.today = datetime.datetime.combine( datetime.date.today(), datetime.datetime.min.time()) self.request_timeuuid = generate_timeuuid() self.form_variables = _sanatize(form_variables) self.get_variables = _sanatize(get_variables) if not init_log: return # store first record of endpoint access try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_access_statement.bind( (self.today, self.request_timeuuid, self.request_timeuuid, self.user, 'init', endpoint, method, self.form_variables, self.get_variables, None))) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_user_access_statement.bind( (self.user, self.request_timeuuid, self.request_timeuuid, 'init', endpoint, method, self.form_variables, self.get_variables, None))) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_last_seen_statement.bind( (self.user, datetime.datetime.now()))) except: logger.exception('Database inaccessible!')
def __init__(self, cassandra_cluster, user, endpoint, method, form_variables, get_variables, init_log): self.cassandra_cluster = cassandra_cluster self.user = user # https://datastax-oss.atlassian.net/browse/PYTHON-212 self.today = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time()) self.request_timeuuid = generate_timeuuid() self.form_variables = _sanatize(form_variables) self.get_variables = _sanatize(get_variables) if not init_log: return # store first record of endpoint access try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_access_statement.bind(( self.today, self.request_timeuuid, self.request_timeuuid, self.user, 'init', endpoint, method, self.form_variables, self.get_variables, None )) ) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_user_access_statement.bind(( self.user, self.request_timeuuid, self.request_timeuuid, 'init', endpoint, method, self.form_variables, self.get_variables, None )) ) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_last_seen_statement.bind(( self.user, datetime.datetime.now() )) ) except: logger.exception('Database inaccessible!')
def __init__(self, app): try: # connect to DSE cluster self.cluster = Cluster([app.config['DSE_CLUSTER']]) self.session = self.cluster.connect() self.session.row_factory = ordered_dict_factory # ensure schema is created self.initialize_schema() # prepare access insert and query statements self.prepare_statements() except: logger.exception('Database objects not created!')
def launch(self, demo): """ Update records for demo launches :param demo: name of the launched demo :return: """ try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_launch_statement.bind( (self.today, self.request_timeuuid, demo, self.user, self.form_variables, datetime.datetime.now()))) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_demo_launch_statement.bind( (demo, self.request_timeuuid, self.user, self.form_variables, datetime.datetime.now()))) except: logger.exception('Database inaccessible!')
def request_password(): access_logger = current_app.cluster.get_access_logger(request) if request.method == 'POST': safe_email = False try: safe_email = auth.is_valid_domain(request.form['email'], 'datastax.com') if not safe_email: user_record = current_app.cluster.get_user( request.form['email']) if user_record and \ user_record[0]['user'] == request.form['email']: safe_email = user_record[0]['user'] except: logger.exception('Email deemed unsafe!') if not safe_email: msg(access_logger, 'Error occurred when validating email address. ' 'Please contact administrator.', 'error') return render_template('login.jinja2') password = auth.create_new_password() current_app.cluster.set_password(safe_email, auth.hash(password, current_app.secret_key)) body = 'Your email and password is: {0} / {1}\n\n' \ 'Feel free to bookmark this personalized address: ' \ 'http://demos.datastax.com:5000/login?email={0}' body = body.format(safe_email, password) message = Message(subject='DataStax Demo Portal Authentication', recipients=[safe_email], body=body) try: current_app.mail.send(message) except: logger.exception('Error sending email.') msg(access_logger, 'Error occurred when sending email. ' 'Please contact administrator.', 'error') return render_template('login.jinja2') msg(access_logger, 'Password emailed.') return redirect('%s?email=%s' % (url_for('authentication_api.login'), safe_email)) else: return render_template('login.jinja2')
def update(self, level, message): """ Update record with Flask flash messages :param message: flash message :return: """ try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_access_statement.bind( (self.today, self.request_timeuuid, generate_timeuuid(), self.user, level, None, None, None, None, message))) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_user_access_statement.bind( (self.user, self.request_timeuuid, generate_timeuuid(), level, None, None, None, None, message))) except: logger.exception('Database inaccessible!')
def update(self, level, message): """ Update record with Flask flash messages :param message: flash message :return: """ try: self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_access_statement.bind(( self.today, self.request_timeuuid, generate_timeuuid(), self.user, level, None, None, None, None, message )) ) self.cassandra_cluster.session.execute( self.cassandra_cluster.insert_user_access_statement.bind(( self.user, self.request_timeuuid, generate_timeuuid(), level, None, None, None, None, message )) ) except: logger.exception('Database inaccessible!')
def ctool(): if 'email' not in session: return redirect(url_for('authentication_api.login')) access_logger = current_app.cluster.get_access_logger(request, session['email']) # only process form if form has been submitted if request.form: access_logger.launch('ctool') # make a mutable dict copy postvars = request.form.copy().to_dict() # ensure jQuery doesn't fail if not postvars['clustername']: msg(access_logger, 'Clustername must be set', 'error') return render_template('ctool.jinja2') postvars = ctoolutils.process(postvars, session) # ensure jQuery doesn't fail if postvars['num_nodes'] < 1: msg(access_logger, 'Must launch at least one node', 'error') return render_template('ctool.jinja2') try: response = ctoolutils.launch(access_logger, postvars) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'launch')) reservation_id = ec2.find_reservation_id_by_tag('cluster_name', postvars[ 'full_name']) response = ctoolutils.install(access_logger, postvars, reservation_id) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'install')) response = ctoolutils.install_opscenter(access_logger, postvars, reservation_id) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'install')) response = ctoolutils.start(access_logger, postvars, reservation_id) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'start')) response = ctoolutils.start_opscenter(access_logger, postvars, reservation_id) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'start')) response = ctoolutils.start_agent(access_logger, postvars, reservation_id) if response: return render_template( ctoolutils.error_handling(access_logger, response, postvars, 'start')) ec2.tag_reservation(reservation_id, 'status', 'Complete.') return redirect('/') except: logger.exception('Exception seen on /ctool:') msg(access_logger, traceback.format_exc(), 'debug') return render_template( ctoolutils.error_handling(access_logger,'Logic exception.', postvars, '/ctool')) return render_template('ctool.jinja2')