Commit 6612e410 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Simap Connector:

- Added min/max values for synthetic sample generators
parent 1dca476d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -346,6 +346,8 @@ class EventDispatcher(BaseEventDispatcher):
                period_scale    = 86_400,
                offset_scale    = 50,
                noise_ratio     = 0.05,
                min_value       = 0.0,
                max_value       = 100.0,
            ),
            latency_sampler=SyntheticSampler.create_random(
                amplitude_scale = 0.5,
@@ -353,6 +355,7 @@ class EventDispatcher(BaseEventDispatcher):
                period_scale    = 60.0,
                offset_scale    = 10.0,
                noise_ratio     = 0.05,
                min_value       = 0.0,
            ),
            related_service_ids=[],
        ))
+18 −10
Original line number Diff line number Diff line
@@ -13,31 +13,36 @@
# limitations under the License.


import math, random, threading
from dataclasses import dataclass
import math, random, sys, threading
from dataclasses import dataclass, field
from datetime import datetime
from typing import Dict
from typing import Dict, Optional
from .Sample import Sample


@dataclass
class SyntheticSampler:
    amplitude   : float = 0.0
    phase       : float = 0.0
    period      : float = 1.0
    offset      : float = 0.0
    noise_ratio : float = 0.0
    amplitude   : float = field(default=0.0)
    phase       : float = field(default=0.0)
    period      : float = field(default=1.0)
    offset      : float = field(default=0.0)
    noise_ratio : float = field(default=0.0)
    min_value   : float = field(default=-sys.float_info.max)
    max_value   : float = field(default=sys.float_info.max)

    @classmethod
    def create_random(
        cls, amplitude_scale : float, phase_scale : float, period_scale : float,
        offset_scale : float, noise_ratio : float
        offset_scale : float, noise_ratio : float,
        min_value : Optional[float] = None, max_value : Optional[float] = None
    ) -> 'SyntheticSampler':
        amplitude  = amplitude_scale * random.random()
        phase      = phase_scale     * random.random()
        period     = period_scale    * random.random()
        offset     = offset_scale    * random.random() + amplitude
        return cls(amplitude, phase, period, offset, noise_ratio)
        if min_value is None: min_value = -sys.float_info.max
        if max_value is None: max_value = sys.float_info.max
        return cls(amplitude, phase, period, offset, noise_ratio, min_value, max_value)

    def get_sample(self) -> Sample:
        timestamp = datetime.timestamp(datetime.utcnow())
@@ -49,6 +54,9 @@ class SyntheticSampler:
        noise = self.amplitude * random.random()
        value = abs((1.0 - self.noise_ratio) * waveform + self.noise_ratio * noise)

        value = max(value, self.min_value)
        value = min(value, self.max_value)

        return Sample(timestamp, 0, value)