1515import io .roastedroot .proxywasm .ChainedHandler ;
1616import io .roastedroot .proxywasm .ForeignFunction ;
1717import io .roastedroot .proxywasm .Handler ;
18+ import io .roastedroot .proxywasm .LogHandler ;
1819import io .roastedroot .proxywasm .LogLevel ;
1920import io .roastedroot .proxywasm .MetricType ;
21+ import io .roastedroot .proxywasm .MetricsHandler ;
2022import io .roastedroot .proxywasm .ProxyMap ;
2123import io .roastedroot .proxywasm .ProxyWasm ;
2224import io .roastedroot .proxywasm .QueueName ;
2325import io .roastedroot .proxywasm .SharedData ;
26+ import io .roastedroot .proxywasm .SharedDataHandler ;
27+ import io .roastedroot .proxywasm .SharedQueueHandler ;
2428import io .roastedroot .proxywasm .StartException ;
2529import io .roastedroot .proxywasm .WasmException ;
2630import io .roastedroot .proxywasm .WasmResult ;
@@ -41,6 +45,10 @@ public final class Plugin {
4145 private final boolean shared ;
4246 private final String name ;
4347
48+ private final MetricsHandler metricsHandler ;
49+ private final SharedQueueHandler sharedQueueHandler ;
50+ private final SharedDataHandler sharedDataHandler ;
51+
4452 private Plugin (Builder builder , ProxyWasm proxyWasm ) throws StartException {
4553 Objects .requireNonNull (proxyWasm );
4654 this .name = Objects .requireNonNullElse (builder .name , "default" );
@@ -49,9 +57,16 @@ private Plugin(Builder builder, ProxyWasm proxyWasm) throws StartException {
4957 this .upstreams = builder .upstreams ;
5058 this .strictUpstreams = builder .strictUpstreams ;
5159 this .minTickPeriodMilliseconds = builder .minTickPeriodMilliseconds ;
52- this .logger = builder .logger ;
5360 this .vmConfig = builder .vmConfig ;
5461 this .pluginConfig = builder .pluginConfig ;
62+ this .logger = Objects .requireNonNullElse (builder .logger , LogHandler .DEFAULT );
63+ ;
64+ this .metricsHandler =
65+ Objects .requireNonNullElse (builder .metricsHandler , MetricsHandler .DEFAULT );
66+ this .sharedQueueHandler =
67+ Objects .requireNonNullElse (builder .sharedQueueHandler , SharedQueueHandler .DEFAULT );
68+ this .sharedDataHandler =
69+ Objects .requireNonNullElse (builder .sharedDataHandler , SharedDataHandler .DEFAULT );
5570
5671 this .wasm = proxyWasm ;
5772 this .wasm .setPluginHandler (new HandlerImpl ());
@@ -86,7 +101,7 @@ public void setServerAdaptor(ServerAdaptor serverAdaptor) {
86101 this .serverAdaptor = serverAdaptor ;
87102 }
88103
89- public Logger logger () {
104+ public LogHandler logger () {
90105 return logger ;
91106 }
92107
@@ -121,9 +136,12 @@ public static class Builder implements Cloneable {
121136 private HashMap <String , String > upstreams ;
122137 private boolean strictUpstreams ;
123138 private int minTickPeriodMilliseconds ;
124- private Logger logger ;
139+ private LogHandler logger ;
125140 private byte [] vmConfig ;
126141 private byte [] pluginConfig ;
142+ private MetricsHandler metricsHandler ;
143+ private SharedQueueHandler sharedQueueHandler ;
144+ private SharedDataHandler sharedDataHandler ;
127145
128146 public Plugin .Builder withName (String name ) {
129147 this .name = name ;
@@ -150,11 +168,26 @@ public Builder withMinTickPeriodMilliseconds(int minTickPeriodMilliseconds) {
150168 return this ;
151169 }
152170
153- public Builder withLogger (Logger logger ) {
171+ public Builder withLogger (LogHandler logger ) {
154172 this .logger = logger ;
155173 return this ;
156174 }
157175
176+ public Builder withMetricsHandler (MetricsHandler metricsHandler ) {
177+ this .metricsHandler = metricsHandler ;
178+ return this ;
179+ }
180+
181+ public Builder withSharedQueueHandler (SharedQueueHandler sharedQueueHandler ) {
182+ this .sharedQueueHandler = sharedQueueHandler ;
183+ return this ;
184+ }
185+
186+ public Builder withSharedDataHandler (SharedDataHandler sharedDataHandler ) {
187+ this .sharedDataHandler = sharedDataHandler ;
188+ return this ;
189+ }
190+
158191 public Plugin .Builder withShared (boolean shared ) {
159192 this .shared = shared ;
160193 return this ;
@@ -202,7 +235,7 @@ public Plugin build(ProxyWasm proxyWasm) throws StartException {
202235 }
203236 }
204237
205- public Logger logger ;
238+ public LogHandler logger ;
206239 static final boolean DEBUG = "true" .equals (System .getenv ("DEBUG" ));
207240 byte [] vmConfig ;
208241 byte [] pluginConfig ;
@@ -214,26 +247,9 @@ public Plugin build(ProxyWasm proxyWasm) throws StartException {
214247 private int tickPeriodMilliseconds ;
215248 private Runnable cancelTick ;
216249 HashMap <String , ForeignFunction > foreignFunctions ;
217- private final AtomicInteger lastMetricId = new AtomicInteger (0 );
218- private HashMap <Integer , io .roastedroot .proxywasm .plugin .Metric > metrics = new HashMap <>();
219- private HashMap <String , io .roastedroot .proxywasm .plugin .Metric > metricsByName = new HashMap <>();
220250 private byte [] funcCallData = new byte [0 ];
221251 private final HashMap <List <String >, byte []> properties = new HashMap <>();
222252
223- public static class Metric {
224-
225- public final int id ;
226- public final MetricType type ;
227- public final String name ;
228- public long value ;
229-
230- public Metric (int id , MetricType type , String name ) {
231- this .id = id ;
232- this .type = type ;
233- this .name = name ;
234- }
235- }
236-
237253 class HandlerImpl extends ChainedHandler {
238254
239255 @ Override
@@ -282,21 +298,12 @@ public WasmResult setProperty(List<String> path, byte[] value) {
282298
283299 @ Override
284300 public void log (LogLevel level , String message ) throws WasmException {
285- Logger l = logger ;
286- if (l == null ) {
287- super .log (level , message );
288- return ;
289- }
290- l .log (level , message );
301+ logger .log (level , message );
291302 }
292303
293304 @ Override
294305 public LogLevel getLogLevel () throws WasmException {
295- Logger l = logger ;
296- if (l == null ) {
297- return super .getLogLevel ();
298- }
299- return l .getLogLevel ();
306+ return logger .getLogLevel ();
300307 }
301308
302309 // //////////////////////////////////////////////////////////////////////
@@ -474,51 +481,27 @@ public int dispatchHttpCall(
474481
475482 @ Override
476483 public int defineMetric (MetricType type , String name ) throws WasmException {
477- var id = lastMetricId .incrementAndGet ();
478- io .roastedroot .proxywasm .plugin .Metric value =
479- new io .roastedroot .proxywasm .plugin .Metric (id , type , name );
480- metrics .put (id , value );
481- metricsByName .put (name , value );
482- return id ;
484+ return metricsHandler .defineMetric (type , name );
483485 }
484486
485487 @ Override
486488 public long getMetric (int metricId ) throws WasmException {
487- var metric = metrics .get (metricId );
488- if (metric == null ) {
489- throw new WasmException (WasmResult .NOT_FOUND );
490- }
491- return metric .value ;
489+ return metricsHandler .getMetric (metricId );
492490 }
493491
494492 @ Override
495493 public WasmResult incrementMetric (int metricId , long value ) {
496- var metric = metrics .get (metricId );
497- if (metric == null ) {
498- return WasmResult .NOT_FOUND ;
499- }
500- metric .value += value ;
501- return WasmResult .OK ;
494+ return metricsHandler .incrementMetric (metricId , value );
502495 }
503496
504497 @ Override
505498 public WasmResult recordMetric (int metricId , long value ) {
506- var metric = metrics .get (metricId );
507- if (metric == null ) {
508- return WasmResult .NOT_FOUND ;
509- }
510- metric .value = value ;
511- return WasmResult .OK ;
499+ return metricsHandler .recordMetric (metricId , value );
512500 }
513501
514502 @ Override
515503 public WasmResult removeMetric (int metricId ) {
516- io .roastedroot .proxywasm .plugin .Metric metric = metrics .remove (metricId );
517- if (metric == null ) {
518- return WasmResult .NOT_FOUND ;
519- }
520- metricsByName .remove (metric .name );
521- return WasmResult .OK ;
504+ return metricsHandler .removeMetric (metricId );
522505 }
523506
524507 // //////////////////////////////////////////////////////////////////////
@@ -539,12 +522,12 @@ public ForeignFunction getForeignFunction(String name) {
539522
540523 @ Override
541524 public SharedData getSharedData (String key ) throws WasmException {
542- return next () .getSharedData (key );
525+ return sharedDataHandler .getSharedData (key );
543526 }
544527
545528 @ Override
546529 public WasmResult setSharedData (String key , byte [] value , int cas ) {
547- return next () .setSharedData (key , value , cas );
530+ return sharedDataHandler .setSharedData (key , value , cas );
548531 }
549532
550533 // //////////////////////////////////////////////////////////////////////
@@ -553,22 +536,22 @@ public WasmResult setSharedData(String key, byte[] value, int cas) {
553536
554537 @ Override
555538 public int registerSharedQueue (QueueName queueName ) throws WasmException {
556- return next () .registerSharedQueue (queueName );
539+ return sharedQueueHandler .registerSharedQueue (queueName );
557540 }
558541
559542 @ Override
560543 public int resolveSharedQueue (QueueName queueName ) throws WasmException {
561- return next () .resolveSharedQueue (queueName );
544+ return sharedQueueHandler .resolveSharedQueue (queueName );
562545 }
563546
564547 @ Override
565548 public byte [] dequeueSharedQueue (int queueId ) throws WasmException {
566- return next () .dequeueSharedQueue (queueId );
549+ return sharedQueueHandler .dequeueSharedQueue (queueId );
567550 }
568551
569552 @ Override
570553 public WasmResult enqueueSharedQueue (int queueId , byte [] value ) {
571- return next () .enqueueSharedQueue (queueId , value );
554+ return sharedQueueHandler .enqueueSharedQueue (queueId , value );
572555 }
573556 }
574557}
0 commit comments