modelData.ts
unknown
typescript
2 years ago
3.8 kB
16
Indexable
// Utils
import {appendToJsonFile, createJsonFile} from '@Utils/fileHelper';
// Types
import {ModelEventType} from '@Types';
import {S3PathKey} from '@Types';
/**
* It takes the railroad_id and returns the name of the file that will be used to store the model data
* @param {string} railroad_id - The railroad's ID.
* @returns A string with the name of the file that will be used to store the model data
*/
export const generateModelFileName = (
railroad_id: string,
simple_train_consist_id: string,
) => {
const today = new Date().toISOString();
const year = today.slice(0, 4);
const month = today.slice(5, 7);
const day = today.slice(8, 10);
const epochTimeStamp = Date.now();
return `${railroad_id}:${year}:${month}:${day}:${epochTimeStamp}:${simple_train_consist_id}`;
};
/**
* It creates a new JSON file with the filename provided, and the JSON schema provided
* @param {string} railroad_id - The ID of the railroad you're on.
* @param {string} trip_id - This is the trip_id that you want to use.
* @param {string} user_id - The user_id of the user who is creating the file.
* @param {string} filename - the name of the file to be created
* @param {any} location - the location object that will be used to generate the first Model log
* @param {string} simple_train_consist_id - the simple train consist id
* @param {any} loco_id - the locomotive id
* @param {ModelEventType} event_type - the model event type
*/
export const createNewModelFile = async (
railroad_id: string,
trip_id: string,
user_id: string,
filename: string,
location: any,
simple_train_consist_id: string,
loco_id: string,
event_type: ModelEventType,
) => {
const jsonSchema = {
railroad_id: railroad_id,
trip_id: trip_id,
user_id: user_id,
simple_train_consist_id: simple_train_consist_id,
loco_id: loco_id,
created_at_utc: new Date().toISOString(),
data: [generateModelJsonLog(event_type, location, null)],
};
const stringify = JSON.stringify(jsonSchema);
await createJsonFile(
S3PathKey.APP_MODEL_LOGGING,
filename,
stringify.slice(0, stringify.length - 2),
);
};
/**
* It takes a filename and a location object, generates a model log object, stringifies it, and appends
* it to the file
* @param {string} filename - the name of the file to append to
* @param {ModelEventType} event_type - the name of the file to append to
* @param {any} location - the location object that will be used to generate the Model log
* @param {any} recommendation - the generated recommendation
*/
export const appendToModelFile = async (
filename: string,
event_type: ModelEventType,
location: any,
recommendation: any,
) => {
const modelLog = generateModelJsonLog(event_type, location, recommendation);
const stringify = JSON.stringify(modelLog);
await appendToJsonFile(
S3PathKey.APP_MODEL_LOGGING,
filename,
`,${stringify}`,
);
};
/**
* It takes a location object and returns a Model log object
* @param {any} location - the location object that will be used to generate the model log
* @returns A JSON object
*/
export const generateModelJsonLog = (
event_type: ModelEventType,
location: any,
recommendation: any,
) => {
const modelLog = {
event_type: event_type,
timestamp_utc: new Date().toISOString(),
recommendation: recommendation,
position: {
coordinate: {
lat: location?.latitude,
lng: location?.longitude,
gps_error_radius_m: location?.accuracy,
},
altitude: {
alt_m: location?.altitude,
alt_error_m: location?.verticalAccuracy,
},
},
velocity: {
speed_mps: location?.speed,
speed_error_mps: 0,
course: location?.course,
course_error: 0,
},
};
return modelLog;
};
Editor is loading...