Ejemplo n.º 1
0
def heartbeat_merge(last_event: Event, heartbeat: Event,
                    pulsetime: float) -> Optional[Event]:
    """
    Merges two events if they have identical data
    and the heartbeat timestamp is within the pulsetime window.
    """
    if last_event.data == heartbeat.data:
        # Seconds between end of last_event and start of heartbeat
        pulseperiod_end = last_event.timestamp + last_event.duration + timedelta(
            seconds=pulsetime)
        within_pulsetime_window = last_event.timestamp <= heartbeat.timestamp <= pulseperiod_end

        if within_pulsetime_window:
            # Seconds between end of last_event and start of timestamp
            new_duration = (heartbeat.timestamp -
                            last_event.timestamp) + heartbeat.duration
            if last_event.duration < timedelta(0):
                logger.warning(
                    "Merging heartbeats would result in a negative duration, refusing to merge."
                )
            else:
                last_event.duration = new_duration
                return last_event

    return None
Ejemplo n.º 2
0
def heartbeat_merge(
    last_event: Event, heartbeat: Event, pulsetime: float
) -> Optional[Event]:
    """
    Merges two events if they have identical data
    and the heartbeat timestamp is within the pulsetime window.
    """
    if last_event.data == heartbeat.data:
        # Seconds between end of last_event and start of heartbeat
        pulseperiod_end = (
            last_event.timestamp + last_event.duration + timedelta(seconds=pulsetime)
        )
        within_pulsetime_window = (
            last_event.timestamp <= heartbeat.timestamp <= pulseperiod_end
        )

        if within_pulsetime_window:
            # Seconds between end of last_event and start of timestamp
            new_duration = (
                heartbeat.timestamp - last_event.timestamp
            ) + heartbeat.duration
            if last_event.duration < timedelta(0):
                logger.warning(
                    "Merging heartbeats would result in a negative duration, refusing to merge."
                )
            else:
                # Taking the max of durations ensures heartbeats that end before the last event don't shorten it
                last_event.duration = max((last_event.duration, new_duration))
                return last_event

    return None
Ejemplo n.º 3
0
def window_events(client, start_date, end_date):
    print("Generating fake window events")

    template_window_events = []
    for app_i in range(4):
        appname = "App " + str(app_i)
        for title_i in range(10):
            title = "Title " + str(title_i)
            e = Event(timestamp=start_date,
                      data={
                          "title": title,
                          "app": appname
                      })
            template_window_events.append(e)
    ts = start_date
    window_events = []
    batch_size = 500
    count = 0
    while ts < end_date:
        event_duration = 5
        e = copy(random.choice(template_window_events))
        e.timestamp = ts
        e.duration = timedelta(seconds=event_duration)
        window_events.append(e)
        ts += timedelta(seconds=event_duration)
        count += 1
        if count % batch_size == 0:
            client.send_events(window_bucket_name, window_events)
            window_events = []
            sleep(0.05)
    client.send_events(window_bucket_name, window_events)

    print("Sent {} window events".format(count))
Ejemplo n.º 4
0
def heartbeat_merge(last_event: Event, heartbeat: Event, pulsetime: float) -> Optional[Event]:
    """
    Merges two events if they have identical labels and are
    separated by a time smaller than :code:`pulsetime` seconds.
    """
    if last_event.data == heartbeat.data:
        gap = heartbeat.timestamp - (last_event.timestamp + last_event.duration)

        if gap <= timedelta(seconds=pulsetime):
            # Heartbeat was within pulsetime window, set duration of last event appropriately
            last_event.duration = (heartbeat.timestamp - last_event.timestamp) + heartbeat.duration
            return last_event

    return None
def heartbeat_merge(last_event: Event, heartbeat: Event, pulsetime: float) -> Optional[Event]:
    """
    Merges two events if they have identical data
    and the heartbeat timestamp is within the pulsetime window.
    """
    if last_event.data == heartbeat.data:
        # Seconds between end of last_event and start of heartbeat
        pulseperiod_end = last_event.timestamp + last_event.duration + timedelta(seconds=pulsetime)
        within_pulsetime_window = last_event.timestamp <= heartbeat.timestamp <= pulseperiod_end

        if within_pulsetime_window:
            # Seconds between end of last_event and start of timestamp
            new_duration = (heartbeat.timestamp - last_event.timestamp) + heartbeat.duration
            if last_event.duration < timedelta(0):
                logger.warning("Merging heartbeats would result in a negative duration, refusing to merge.")
            else:
                last_event.duration = new_duration
                return last_event

    return None
Ejemplo n.º 6
0
def test_set_invalid_duration() -> None:
    e = Event()
    with pytest.raises(TypeError):
        e.duration = "12"  # type: ignore
def test_set_invalid_duration() -> None:
    e = Event()
    with pytest.raises(TypeError):
        e.duration = "12"  # type: ignore
Ejemplo n.º 8
0
def _round_durations(e: Event):
    e.duration = _round_td(e.duration)
    return e