Generators ========== MockFogLoad provides a single generator app from which different kinds of generators can be spawned. Generator Types --------------- All data is generated deterministically based on an increasing, specifiable date value. Below is a list of the available generator types as well as their configurable paramters and format string options: * HeartRate: Generates various medical information. * Available format string values: age, sex, heartRate, chestPainLevel, bloodPressure, cholestorol, bloodSugar, electroCardiographic * Options: None * Temperature: Generates temperatures according to given location and month. * Available format string values: celsius * Options: * Location: Location for which temperatures should be generated. Can be: BerlinDahlem, Bremen, Frankfurt, Salzburg, Wien * Month: Month for which to generate temperatures. Can be: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec * Power: * Available format string values: activePower, reactivePower, voltage, ampere, kwh * Options: None * TaxiFares: * Available format string values: rideId, taxiId, driverId, startTime, paymentType, tip, tolls, totalFare * Options: None * TaxiRides: * Available format string values: rideId, isStart, startTime, endTime, startLongitude, startLatitude, endLongitude, endLatitude, passengerCount, taxiId, driverId * Options: None Implementing A New Generator ---------------------------- Implementing a new generator type involves a few simple changes to the kotlin project. 1. Create a new kotlin `.kt` file in the directory `src/generators`. The full package name of your generator must have the form `com.fcp.generators.{Name}Generator`. In this file, implement a class that inherits from `com.fcp.generators.Generator`, where `T` is the type of your generator's data class. 2. (Optional) Implement a companion object to fetch your generator's data from S3. The base generator class provides the functions `loadResource` and `uploadResource` to handle down- and uploading from S3, respectively. 3. Implement a static initializer block in your generator containing a call to `BaseGenerator.registerGeneratorType("Name", this::class)` to ensure that instances of your generator can be created. 4. Implement an overriden `fun getRandomValue(date: LocalDateTime): T`. This function handles the actual data generation. Your generated datapoint should be based solely on the passed date value to guarantee deterministic results. 5. That's it! Your generator type can now be created by referencing the name you assigned in a modify event.