def run(self): sks = Device.objects.filter(enabled=True, module='netshark') res = [] for sk in sks: sk_dev = DeviceManager.get_device(sk.id) for job in sk_dev.get_capture_jobs(): if_name = job.data['config']['interface_name'] start = str(nsec_string_to_datetime(job.packet_start_time)) end = str(nsec_string_to_datetime(job.packet_end_time)) bpf_filter = job.data['config'].get('bpf_filter', '') if len(bpf_filter) > self.MAX_LENGTH: bpf_filter = bpf_filter[:self.MAX_LENGTH - 2] + '...' pkts_dropped = job.get_stats()['packets_dropped'] pkts_written = job.get_stats()['packets_written'] job_data = dict(netshark=sk.name, job_id=job.data['id'], job_name=job.data['config']['name'], interface=if_name, state=job.data['status']['state'], size=job.data['status']['packet_size'], start_time=start, end_time=end, bpf_filter=bpf_filter, dpi_enabled=str(job.dpi_enabled), index_enabled=str(job.index_enabled), last_sec_dropped=pkts_dropped['last_second'], last_min_dropped=pkts_dropped['last_minute'], last_hr_dropped=pkts_dropped['last_hour'], last_sec_written=pkts_written['last_second'], last_min_written=pkts_written['last_minute'], last_hr_written=pkts_written['last_hour'] ) res.append(job_data) return QueryComplete(pandas.DataFrame(res))
def run(self): sks = Device.objects.filter(enabled=True, module='netshark') res = [] for sk in sks: sk_dev = DeviceManager.get_device(sk.id) for job in sk_dev.get_capture_jobs(): if_name = job.data['config']['interface_name'] start = str(nsec_string_to_datetime(job.packet_start_time)) end = str(nsec_string_to_datetime(job.packet_end_time)) bpf_filter = job.data['config'].get('bpf_filter', '') if len(bpf_filter) > self.MAX_LENGTH: bpf_filter = bpf_filter[:self.MAX_LENGTH - 2] + '...' pkts_dropped = job.get_stats()['packets_dropped'] pkts_written = job.get_stats()['packets_written'] job_data = dict(netshark=sk.name, job_id=job.data['id'], job_name=job.data['config']['name'], interface=if_name, state=job.data['status']['state'], size=job.data['status']['packet_size'], start_time=start, end_time=end, bpf_filter=bpf_filter, dpi_enabled=str(job.dpi_enabled), index_enabled=str(job.index_enabled), last_sec_dropped=pkts_dropped['last_second'], last_min_dropped=pkts_dropped['last_minute'], last_hr_dropped=pkts_dropped['last_hour'], last_sec_written=pkts_written['last_second'], last_min_written=pkts_written['last_minute'], last_hr_written=pkts_written['last_hour']) res.append(job_data) return QueryComplete(pandas.DataFrame(res))
def _convert_sample_time(self, sample_timestamp): if self.view.timestamp_format == APITimestampFormat.SECOND: return timeutils.sec_string_to_datetime(sample_timestamp) elif self.view.timestamp_format == APITimestampFormat.MILLISECOND: return timeutils.msec_string_to_datetime(sample_timestamp) elif self.view.timestamp_format == APITimestampFormat.MICROSECOND: return timeutils.usec_string_to_datetime(sample_timestamp) elif self.view.timestamp_format == APITimestampFormat.NANOSECOND: return timeutils.nsec_string_to_datetime(sample_timestamp) else: raise ValueError('invalid time format %s' % str(view.timestamp_format))
def _to_native(string, legend_entry): """ convert `string` to an appropriate native type given `legend_entry` """ if legend_entry['calculation'] == 'AVG': string, den = string.split(':', 1) denominator = int(den) else: denominator = 1 if legend_entry['type'].startswith('INT') \ or legend_entry['type'].startswith('UINT') \ or legend_entry['type'] in ( 'TCP_PORT', 'UDP_PORT'): if legend_entry['base'] == 'DEC': baseval = 10 elif legend_entry['base'] == 'HEX': baseval = 16 else: raise ValueError('do not know how to handle integer base %s' % legend_entry['base']) return int(string, baseval) / denominator if legend_entry['type'] == 'DOUBLE': return float(string) / denominator if legend_entry['type'] == 'BOOLEAN': if string.lower() == 'false' or string.lower() == '0': return 0 elif string.lower() == 'true' or string.lower() == '1': return 1 else: # Booleans can be a count of successes return int(string) if legend_entry['type'] == 'ABSOLUTE_TIME': return timeutils.nsec_string_to_datetime(string) if legend_entry['type'] == 'RELATIVE_TIME': return float(string) / denominator # XXX anything with IPv4 or ETHER? return string
def _to_native(string, legend_entry): """ convert `string` to an appropriate native type given `legend_entry` """ if legend_entry['calculation'] == 'AVG': string, den = string.split(':', 1) denominator = int(den) else: denominator = 1 if (legend_entry['type'].startswith('INT') or legend_entry['type'].startswith('UINT') or legend_entry['type'] in ('TCP_PORT', 'UDP_PORT')): if legend_entry['base'] == 'DEC': baseval = 10 elif legend_entry['base'] == 'HEX': baseval = 16 else: raise ValueError('do not know how to handle integer base %s' % legend_entry['base']) return int(string, baseval) / denominator if legend_entry['type'] == 'DOUBLE': return float(string) / denominator if legend_entry['type'] == 'BOOLEAN': if string.lower() == 'false' or string.lower() == '0': return 0 elif string.lower() == 'true' or string.lower() == '1': return 1 else: # Booleans can be a count of successes return int(string) if legend_entry['type'] == 'ABSOLUTE_TIME': return timeutils.nsec_string_to_datetime(string) if legend_entry['type'] == 'RELATIVE_TIME': return float(string) / denominator # XXX anything with IPv4 or ETHER? return string