async createSimulation()

in source/microservices/lib/simulationManager.js [86:135]


    async createSimulation(sim) {
        try {
            const count = sim.devices.reduce((acc, curr) => acc + curr.amount, 0);
            if (count > 100) {
                const error = new Error();
                error.code = 400;
                error.error = 'DeviceCreateLimitExceeded';
                error.message = 'Exceeded limit of 100 concurrent device creations per request.';
                throw (error);
            }
            let _id;
            if (sim.simId && sim.simId !== 'idsAutoDemo') {
                _id = sim.simId;
            } else {
                const suffix = sim.simId || "";
                _id = nanoid(9) + suffix;
            }
            const date = new Date().toISOString();
            let _simulation = {
                simId: _id,
                name: sim.name,
                stage: 'sleeping',
                devices: sim.devices,
                interval: sim.interval,
                duration: sim.duration,
                runs: 0,
                lastRun: '',
                createdAt: date,
                updatedAt: date,
            };
            let params = {
                TableName: process.env.SIMULATIONS_TBL,
                Item: _simulation
            };
            let data = await docClient.put(params).promise();
            if (process.env.SEND_ANONYMOUS_METRIC === 'Yes') {
                let metricData = {
                    eventType: 'create simulation',
                    duration: sim.duration,
                    numDevices: count
                }
                await sendAnonymousMetric(metricData);
            }
            return (data);
        } catch (err) {
            console.error(err);
            console.error(`Error occurred while attempting to create simulation.`);
            throw (err);
        }
    }