def add_aggregation( self, name, agg_name, agg_params, description='', view_id=None, chart_type=None): """Add aggregation to the sketch. Args: name: the name of the aggregation run. agg_name: the name of the aggregation class to run. agg_params: a dictionary of the parameters for the aggregation. description: description of the aggregation, visible in the UI, this is optional. view_id: optional ID of the view to attach the aggregation to. chart_type: string representing the chart type. """ if not agg_name: raise ValueError('Aggregator name needs to be defined.') if not agg_params: raise ValueError('Aggregator parameters have to be defined.') if view_id: view = View.query.get(view_id) else: view = None agg_json = json.dumps(agg_params) aggregation = Aggregation.get_or_create( name=name, description=description, agg_type=agg_name, parameters=agg_json, chart_type=chart_type, user=None, sketch=self.sql_sketch, view=view) db_session.add(aggregation) db_session.commit() return aggregation
def create_aggregation_from_form(sketch, form): """Creates an aggregation from form data. Args: sketch: Instance of timesketch.models.sketch.Sketch form: Instance of timesketch.lib.forms.SaveAggregationForm Returns: An aggregation (instance of timesketch.models.sketch.Aggregation) """ # Default to user supplied data name = form.get('name', '') description = form.get('description', '') agg_type = form.get('agg_type', '') parameter_data = form.get('parameters', {}) parameters = json.dumps(parameter_data, ensure_ascii=False) chart_type = form.get('chart_type', '') view_id = form.get('view_id') # Create the aggregation in the database aggregation = Aggregation( name=name, description=description, agg_type=agg_type, parameters=parameters, chart_type=chart_type, user=current_user, sketch=sketch, view=view_id ) labels = form.get('labels', '') if labels: for label in json.loads(labels): if aggregation.has_label(label): continue aggregation.add_label(label) db_session.add(aggregation) db_session.commit() return aggregation