예제 #1
0
파일: models.py 프로젝트: ddsc/ddsc-core
    def set_event(self, timestamp, row):
        if timestamp.tzinfo is None or \
                timestamp.tzinfo.utcoffset(timestamp) is None:
            timestamp = INTERNAL_TIMEZONE.localize(timestamp)

        # Update first and latest value.
        if 'value' in row:
            if not self.latest_value_timestamp \
                    or self.latest_value_timestamp <= timestamp:
                if self.value_type in (
                    Timeseries.ValueType.INTEGER,
                    Timeseries.ValueType.FLOAT
                ):
                    self.latest_value_number = row['value']
                elif self.value_type in (
                        Timeseries.ValueType.TEXT,
                        Timeseries.ValueType.IMAGE,
                        Timeseries.ValueType.GEO_REMOTE_SENSING):
                    self.latest_value_text = row['value']
                self.latest_value_timestamp = timestamp
            if not self.first_value_timestamp \
                    or timestamp < self.first_value_timestamp:
                self.first_value_timestamp = timestamp

        store = DataStore()
        store.write_row('events', self.uuid, timestamp, row)
예제 #2
0
파일: models.py 프로젝트: ddsc/ddsc-core
    def get_events(self, start=None, end=None, filter=None,
                   ignore_rejected=None):
        if filter is None:
            filter = ['value', 'flag']

        if start and (
            start.tzinfo is None
            or start.tzinfo.utcoffset(start) is None
        ):
            start = INTERNAL_TIMEZONE.localize(start)
        if end and (
            end.tzinfo is None
            or end.tzinfo.utcoffset(end) is None
        ):
            end = INTERNAL_TIMEZONE.localize(end)

        if (self.first_value_timestamp is None or
                self.latest_value_timestamp is None):
            # If there's no first or last timestamp, there's no data.
            # So make sure Cassandra returns nothing with no hard work.
            start = None
            end = None
        else:
            if start is None or start < self.first_value_timestamp:
                start = self.first_value_timestamp
            if end is None or end > self.latest_value_timestamp:
                end = self.latest_value_timestamp + timedelta(seconds=1)
            if start > end:
                start = None
                end = None

        store = DataStore()
        value_type_map = {
            Timeseries.ValueType.FLOAT: 'float',
            Timeseries.ValueType.INTEGER: 'integer',
        }
        convert_values_to = value_type_map.get(self.value_type)
        return store.read(
            'events', self.uuid, start, end, params=filter,
            convert_values_to=convert_values_to,
            ignore_rejected=ignore_rejected
        )
예제 #3
0
파일: models.py 프로젝트: ddsc/ddsc-core
 def set_file(self, timestamp, content):
     if not self.is_file():
         raise Exception("Timeseries is not a file type.")
     if timestamp.tzinfo is None or \
             timestamp.tzinfo.utcoffset(timestamp) is None:
         timestamp = INTERNAL_TIMEZONE.localize(timestamp)
     dt = timestamp.strftime(FILENAME_FORMAT)
     data_dir = self._data_dir(timestamp)
     file_path = data_dir + dt
     temp = tempfile.NamedTemporaryFile(delete=False)
     temp.write(content)
     if not os.path.exists(data_dir):
         os.makedirs(data_dir)
     shutil.move(temp.name, file_path)
     row = {"datetime": dt, "value": file_path}
     self.set_event(timestamp, row)