示例#1
0
    def __init__(self, timestamp: datetime, sensor: str, target: str, power: float, metadata: Dict[str, Any] = {}):
        """
        Initialize a Power report using the given parameters.
        :param datetime timestamp: Report timestamp
        :param str sensor: Sensor name
        :param str target: Target name
        :param float power: Power value
        :param dict metadata: Metadata values, can be anything that add useful information
        """
        Report.__init__(self, timestamp, sensor, target, metadata)

        self.power = power
示例#2
0
    def __init__(self, timestamp: datetime, sensor: str, target: str, groups: Dict[str, Dict]):
        """
        Initialize an HWPC report using the given parameters.
        :param datetime timestamp: Timestamp of the report
        :param str sensor: Sensor name
        :param str target: Target name
        :param Dict groups: Events groups
        """
        Report.__init__(self, timestamp, sensor, target)

        #: (dict): Events groups
        self.groups = groups
示例#3
0
    def from_csv_lines(lines: CsvLines) -> PowerReport:
        """
        :param lines: list of pre-parsed lines. a line is a tuple composed with :
                         - the file name where the line were read
                         - a dictionary where key is column name and value is the value read from the line
        :return: a PowerReport that contains value from the given lines
        """
        if len(lines) != 1:
            raise BadInputData('a power report could only be parsed from one csv line', None)
        file_name, row = lines[0]

        try:
            sensor_name = row['sensor']
            target = row['target']
            timestamp = Report._extract_timestamp(row['timestamp'])
            power = float(row['power'])
            metadata = {}

            for key in row.keys():
                if key not in CSV_HEADER_POWER:
                    metadata[key] = row[key]
            return PowerReport(timestamp, sensor_name, target, power, metadata)

        except KeyError as exn:
            raise BadInputData('missing field ' + str(exn.args[0]) + ' in csv file ' + file_name, row) from exn
        except ValueError as exn:
            raise BadInputData(exn.args[0], row) from exn
示例#4
0
    def __init__(self,
                 timestamp: datetime,
                 sensor: str,
                 target: str,
                 usage: Dict,
                 global_cpu_usage: float,
                 metadata: Dict[str, Any] = {}):
        """
        Initialize an Procfs report using the given parameters.
        :param datetime timestamp: Timestamp of the report
        :param str sensor: Sensor name
        :param str target: Target name
        :param Dict[str,float] usage : CGroup name and cpu_usage
        :param float global_cpu_usage : The global CPU usage, with untracked process
        """
        Report.__init__(self, timestamp, sensor, target, metadata)

        #: (dict): Events groups
        self.usage = usage
        self.global_cpu_usage = global_cpu_usage
示例#5
0
    def from_csv_lines(lines: CsvLines) -> ProcfsReport:
        """ Extract a ProcfsReport from a csv"""
        sensor_name = None
        target = None
        timestamp = None
        usage = {}
        global_cpu_usage = None
        metadata = {}
        for file_name, row in lines:
            cgroup_name = file_name[:-4] if file_name[
                len(file_name) - 4:] == '.csv' else file_name
            try:
                if sensor_name is None:
                    sensor_name = row['sensor']
                    target = row['target']
                    timestamp = Report._extract_timestamp(row['timestamp'])
                    global_cpu_usage = row['global_cpu_usage']
                else:
                    if sensor_name != row['sensor']:
                        raise BadInputData(
                            'csv line with different sensor name are mixed into one report',
                            {})
                    if target != row['target']:
                        raise BadInputData(
                            'csv line with different target are mixed into one report',
                            {})
                    if timestamp != ProcfsReport._extract_timestamp(
                            row['timestamp']):
                        raise BadInputData(
                            'csv line with different timestamp are mixed into one report',
                            {})
                    if global_cpu_usage != row['global_cpu_usage']:
                        raise BadInputData(
                            'Different cpu usage are provided in one report',
                            {})

                ProcfsReport._create_cgroup(row, cgroup_name, usage)

                for key, value in row.items():
                    if key not in CSV_HEADER_PROCFS:
                        metadata[key] = value

            except KeyError as exn:
                raise BadInputData(
                    'missing field ' + str(exn.args[0]) + ' in csv file ' +
                    file_name, {}) from exn
            except ValueError as exn:
                raise BadInputData(exn.args[0], row) from exn

        return ProcfsReport(timestamp, sensor_name, target, usage,
                            global_cpu_usage, metadata)
示例#6
0
 def from_json(data: Dict) -> Report:
     """
     Generate a report using the given data.
     :param data: Dictionary containing the report attributes
     :return: The HWPC report initialized with the given data
     """
     try:
         ts = Report._extract_timestamp(data['timestamp'])
         metadata = {} if 'metadata' not in data else data['metadata']
         return PowerReport(ts, data['sensor'], data['target'], data['power'], metadata)
     except KeyError as exn:
         raise BadInputData('PowerReport require field ' + str(exn.args[0]) + ' in json document', data) from exn
     except ValueError as exn:
         raise BadInputData(exn.args[0], data) from exn