Add a shared LRU cache per worker
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationCache.ts
CommitLineData
7c72977b
JB
1import ChargingStationConfiguration from '../types/ChargingStationConfiguration';
2import ChargingStationTemplate from '../types/ChargingStationTemplate';
3import { ChargingStationUtils } from './ChargingStationUtils';
4import LRUCache from 'mnemonist/lru-map-with-delete';
5
6enum CacheType {
7 CHARGING_STATION_TEMPLATE = 'chargingStationTemplate',
8 CHARGING_STATION_CONFIGURATION = 'chargingStationConfiguration',
9}
10
11export class ChargingStationCache {
12 private static instance: ChargingStationCache | null = null;
13 private readonly lruCache: LRUCache<string, any>;
14
15 private constructor() {
16 this.lruCache = new LRUCache<string, any>(1000);
17 }
18
19 public static getInstance(): ChargingStationCache {
20 if (!ChargingStationCache.instance) {
21 ChargingStationCache.instance = new ChargingStationCache();
22 }
23 return ChargingStationCache.instance;
24 }
25
26 public hasChargingStationConfiguration(chargingStationConfigurationHash: string): boolean {
27 return this.has(CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash);
28 }
29
30 public setChargingStationConfiguration(
31 chargingStationConfiguration: ChargingStationConfiguration
32 ): void {
33 if (
34 ChargingStationUtils.isChargingStationConfigurationCacheable(chargingStationConfiguration)
35 ) {
36 this.set(
37 CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfiguration.configurationHash,
38 chargingStationConfiguration
39 );
40 }
41 }
42
43 public getChargingStationConfiguration(
44 chargingStationConfigurationHash: string
45 ): ChargingStationConfiguration {
46 return this.get(
47 CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash
48 ) as ChargingStationConfiguration;
49 }
50
51 public deleteChargingStationConfiguration(chargingStationConfigurationHash: string): void {
52 this.delete(CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash);
53 }
54
55 public hasChargingStationTemplate(chargingStationTemplateHash: string): boolean {
56 return this.has(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash);
57 }
58
59 public setChargingStationTemplate(chargingStationTemplate: ChargingStationTemplate): void {
60 this.set(
61 CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplate.templateHash,
62 chargingStationTemplate
63 );
64 }
65
66 public getChargingStationTemplate(chargingStationTemplateHash: string): ChargingStationTemplate {
67 return this.get(
68 CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash
69 ) as ChargingStationTemplate;
70 }
71
72 public deleteChargingStationTemplate(chargingStationTemplateHash: string): void {
73 this.delete(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash);
74 }
75
76 public clear(): void {
77 this.lruCache.clear();
78 }
79
80 private has(key: string): boolean {
81 return this.lruCache.has(key);
82 }
83
84 private get(key: string): any {
85 return this.lruCache.get(key);
86 }
87
88 private set(key: string, value: any): void {
89 this.lruCache.set(key, value);
90 }
91
92 private delete(key: string): void {
93 this.lruCache.delete(key);
94 }
95}