Untested submitting events to db
This commit is contained in:
parent
0fc390c713
commit
acf8889874
4
src/Models/db/event.ts
Normal file
4
src/Models/db/event.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export interface IEvent {
|
||||||
|
id: number;
|
||||||
|
timestamp: Date;
|
||||||
|
}
|
5
src/Models/db/eventServiceInstance.ts
Normal file
5
src/Models/db/eventServiceInstance.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export interface IEventServiceInstance {
|
||||||
|
id: number;
|
||||||
|
eventId: number;
|
||||||
|
serviceId: string;
|
||||||
|
}
|
7
src/Models/db/eventServiceInstanceCharacteristics.ts
Normal file
7
src/Models/db/eventServiceInstanceCharacteristics.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export interface IEventInstanceCharacteristics {
|
||||||
|
id: number;
|
||||||
|
instanceId: number;
|
||||||
|
key: string;
|
||||||
|
type: string;
|
||||||
|
value: string;
|
||||||
|
}
|
@ -1,12 +1,15 @@
|
|||||||
import { HapClient, HapMonitor } from "../HapClient";
|
import { HapClient, HapMonitor } from "../HapClient";
|
||||||
import { log } from '../Types/types';
|
import { log } from '../Types/types';
|
||||||
import { singleton, inject, container } from 'tsyringe';
|
import { singleton, inject, container } from 'tsyringe';
|
||||||
import { IServiceType } from "../HapClient/interfaces";
|
import { IServiceType, ICharacteristicType } from "../HapClient/interfaces";
|
||||||
import { IConfig } from "../Models/IConfig";
|
import { IConfig } from "../Models/IConfig";
|
||||||
import { Database } from "sqlite3";
|
import { Database } from "sqlite3";
|
||||||
import { mkdirSync } from 'fs';
|
import { mkdirSync } from 'fs';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import Knex = require("knex");
|
import Knex from 'knex';
|
||||||
|
import { IEvent } from "../Models/db/event";
|
||||||
|
import { IEventServiceInstance } from "../Models/db/eventServiceInstance";
|
||||||
|
import { IEventInstanceCharacteristics } from "../Models/db/eventServiceInstanceCharacteristics";
|
||||||
|
|
||||||
|
|
||||||
@singleton()
|
@singleton()
|
||||||
@ -19,6 +22,8 @@ export default class Monitor {
|
|||||||
private databaseName = 'automation.db';
|
private databaseName = 'automation.db';
|
||||||
private db?: Database;
|
private db?: Database;
|
||||||
private knex?: Knex;
|
private knex?: Knex;
|
||||||
|
private hapMonitor?: HapMonitor;
|
||||||
|
private services: Array<IServiceType> = [];
|
||||||
|
|
||||||
constructor(@inject("log") log: log, @inject("config") config: IConfig) {
|
constructor(@inject("log") log: log, @inject("config") config: IConfig) {
|
||||||
this.log = log;
|
this.log = log;
|
||||||
@ -48,12 +53,12 @@ export default class Monitor {
|
|||||||
|
|
||||||
private initializeHapMonitor = async (): Promise<void> => {
|
private initializeHapMonitor = async (): Promise<void> => {
|
||||||
await this.client.discover();
|
await this.client.discover();
|
||||||
const services: Array<IServiceType> = await this.client.getAllServices();
|
this.services = await this.client.getAllServices();
|
||||||
|
|
||||||
const hapMonitor = new HapMonitor(this.log, this.log, this.pin, services);
|
this.hapMonitor = new HapMonitor(this.log, this.log, this.pin, this.services);
|
||||||
|
|
||||||
//Set service updated event
|
//Set service updated event
|
||||||
hapMonitor.on('service-updated', this.onServiceUpdated);
|
this.hapMonitor.on('service-updated', this.onServiceUpdated);
|
||||||
|
|
||||||
this.log("Monitor ready");
|
this.log("Monitor ready");
|
||||||
}
|
}
|
||||||
@ -86,31 +91,22 @@ export default class Monitor {
|
|||||||
|
|
||||||
if (!hasTables) {
|
if (!hasTables) {
|
||||||
//create databse tables
|
//create databse tables
|
||||||
await this.knex.raw(`CREATE TABLE "event_service_instance_characteristics" (
|
await this.knex.raw(`CREATE TABLE "event_instance_characteristics" (
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||||
"instance_id" INTEGER NOT NULL,
|
"instanceId" INTEGER NOT NULL,
|
||||||
"key" TEXT NOT NULL,
|
"key" TEXT NOT NULL,
|
||||||
"type" TEXT NOT NULL,
|
"type" TEXT NOT NULL,
|
||||||
"value" BLOB NOT NULL)`);
|
"value" BLOB NOT NULL)`);
|
||||||
|
|
||||||
await this.knex.raw(`CREATE TABLE "event_service_instances" (
|
await this.knex.raw(`CREATE TABLE "event_service_instances" (
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||||
"event_id" INTEGER NOT NULL,
|
"eventId" INTEGER NOT NULL,
|
||||||
"service_id" INTEGER NOT NULL)`);
|
"serviceUniqueId" INTEGER NOT NULL)`);
|
||||||
|
|
||||||
await this.knex.raw(`CREATE TABLE "events" (
|
await this.knex.raw(`CREATE TABLE "events" (
|
||||||
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||||
"timestamp" BLOB NOT NULL)`);
|
"timestamp" BLOB NOT NULL)`);
|
||||||
|
|
||||||
await this.knex.raw(`CREATE TABLE "services" (
|
|
||||||
"id" INTEGER NOT NULL UNIQUE,
|
|
||||||
"uniqueId" TEXT NOT NULL UNIQUE,
|
|
||||||
"uuid" TEXT NOT NULL UNIQUE,
|
|
||||||
"type" TEXT NOT NULL,
|
|
||||||
"humanType" TEXT NOT NULL,
|
|
||||||
"serviceName" TEXT NOT NULL)`);
|
|
||||||
}
|
}
|
||||||
console.log();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private initDbFile = (path: string): Promise<Database> => {
|
private initDbFile = (path: string): Promise<Database> => {
|
||||||
@ -125,12 +121,27 @@ export default class Monitor {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private syncDatabase = async (): Promise<void> => {
|
private onServiceUpdated = async (updatedServices: Array<IServiceType>): Promise<void> => {
|
||||||
|
const eventId = this.knex && this.knex().into('events').insert<IEvent>({
|
||||||
|
timestamp: this.knex && this.knex.fn.now(),
|
||||||
|
}).returning('id');
|
||||||
|
|
||||||
}
|
await Promise.all(updatedServices.map(async (service: IServiceType): Promise<void> => {
|
||||||
|
const instanceId = this.knex && this.knex().into('event_service_instances').insert<IEventServiceInstance>({
|
||||||
|
eventId: eventId,
|
||||||
|
serviceUniqueId: service.uniqueId
|
||||||
|
}).returning('id');
|
||||||
|
|
||||||
private onServiceUpdated = (updatedServices: Array<IServiceType>): void => {
|
await Promise.all(service.serviceCharacteristics.map(async (characteristic: ICharacteristicType): Promise<void> => {
|
||||||
console.log("asdf");
|
this.knex && await this.knex().into('event_instance_characteristics').insert<IEventInstanceCharacteristics>({
|
||||||
|
instanceId: instanceId,
|
||||||
|
eventId: eventId,
|
||||||
|
key: characteristic.serviceName,
|
||||||
|
type: characteristic.type,
|
||||||
|
value: characteristic.value
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user