def generate_report(
        self, truck_id, package_id, events, is_custom_report=False):
        if(len(events) > 0):
            table = {}
            table['no_of_events'] = len(events)

            table['x'] = self.consolidate_psd(self.process_psd(events, 'x'))
            table['x_grms'] = get_grms(table['x'])

            table['y'] = self.consolidate_psd(self.process_psd(events, 'y'))
            table['y_grms'] = get_grms(table['y'])

            table['z'] = self.consolidate_psd(self.process_psd(events, 'z'))
            table['z_grms'] = get_grms(table['z'])

            table['vector'] = self.consolidate_psd(
                self.process_psd(events, 'vector'))
            table['vector_grms'] = get_grms(table['vector'])

            table['is_custom_report'] = is_custom_report

            self.vibration.update_consolidated_report(
                truck_id, package_id, table)

        return "success"
    def __process_psd(self, event):
        event['psd_x'] = get_psd(event['x'])
        event['psd_y'] = get_psd(event['y'])
        event['psd_z'] = get_psd(event['z'])
        event['psd_vector'] = get_psd(event['vector'])

        event['x_grms'] = get_grms(event['psd_x'])
        event['y_grms'] = get_grms(event['psd_y'])
        event['z_grms'] = get_grms(event['psd_z'])
        event['vector_grms'] = get_grms(event['psd_vector'])

        return event