1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-27 10:32:58 +02:00
joplin/packages/lib/services/plugins/BasePluginRunner.ts

56 lines
1.7 KiB
TypeScript

import Plugin from './Plugin';
import BaseService from '../BaseService';
import Global from './api/Global';
export default abstract class BasePluginRunner extends BaseService {
// A dictionary with the plugin ID as key. Then each entry has a list
// of timestamp/call counts.
//
// 'org.joplinapp.plugins.ExamplePlugin': {
// 1650375620: 5, // 5 calls at second 1650375620
// 1650375621: 19, // 19 calls at second 1650375621
// 1650375623: 12,
// },
// 'org.joplinapp.plugins.AnotherOne': {
// 1650375620: 1,
// 1650375623: 4,
// };
private callStats_: Record<string, Record<number, number>> = {};
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
throw new Error(`Not implemented: ${plugin} / ${sandbox}`);
}
public async stop(plugin: Plugin): Promise<void> {
throw new Error(`Not implemented ${plugin} stop`);
}
public async waitForSandboxCalls(): Promise<void> {
throw new Error('Not implemented: waitForSandboxCalls');
}
protected recordCallStat(pluginId: string) {
const timeSeconds = Math.floor(Date.now() / 1000);
if (!this.callStats_[pluginId]) this.callStats_[pluginId] = {};
if (!this.callStats_[pluginId][timeSeconds]) this.callStats_[pluginId][timeSeconds] = 0;
this.callStats_[pluginId][timeSeconds]++;
}
// Duration in seconds
public callStatsSummary(pluginId: string, duration: number): number[] {
const output: number[] = [];
const startTime = Math.floor(Date.now() / 1000 - duration);
const endTime = startTime + duration;
for (let t = startTime; t <= endTime; t++) {
const callCount = this.callStats_[pluginId][t];
output.push(callCount ? callCount : 0);
}
return output;
}
}