30
30
import java .util .concurrent .atomic .AtomicReference ;
31
31
import java .util .function .Supplier ;
32
32
33
+ /**
34
+ * Plugins have the following tags:
35
+ * <ul>
36
+ * <li><code>config</code> set to the name of the configuration to specifying the plugin</li>
37
+ * <li><code>class</code> set to the name of the instance class</li>
38
+ * </ul>
39
+ */
33
40
public class Plugin <T > implements Supplier <T >, AutoCloseable {
34
41
35
42
private final T instance ;
@@ -40,14 +47,49 @@ private Plugin(T instance, PluginMetricsImpl pluginMetrics) {
40
47
this .pluginMetrics = Optional .ofNullable (pluginMetrics );
41
48
}
42
49
50
+ /**
51
+ * Wrap an instance into a Plugin.
52
+ * @param instance the instance to wrap
53
+ * @param metrics the metrics
54
+ * @param tagsSupplier supplier to retrieve the tags
55
+ * @return the plugin
56
+ */
57
+ public static <T > Plugin <T > wrapInstance (T instance , Metrics metrics , Supplier <Map <String , String >> tagsSupplier ) {
58
+ PluginMetricsImpl pluginMetrics = null ;
59
+ if (instance instanceof Monitorable && metrics != null ) {
60
+ pluginMetrics = new PluginMetricsImpl (metrics , tagsSupplier .get ());
61
+ ((Monitorable ) instance ).withPluginMetrics (pluginMetrics );
62
+ }
63
+ return new Plugin <>(instance , pluginMetrics );
64
+ }
65
+
66
+ /**
67
+ * Wrap an instance into a Plugin.
68
+ * @param instance the instance to wrap
69
+ * @param metrics the metrics
70
+ * @param key the value for the <code>config</code> tag
71
+ * @return the plugin
72
+ */
43
73
public static <T > Plugin <T > wrapInstance (T instance , Metrics metrics , String key ) {
44
74
return wrapInstance (instance , metrics , () -> tags (key , instance ));
45
75
}
46
76
47
- public static <T > Plugin <T > wrapInstance (T instance , Metrics metrics , String key , Map <String , String > extraTags ) {
48
- Map <String , String > tags = tags (key , instance );
49
- tags .putAll (extraTags );
50
- return wrapInstance (instance , metrics , () -> tags );
77
+ /**
78
+ * Wrap an instance into a Plugin.
79
+ * @param instance the instance to wrap
80
+ * @param metrics the metrics
81
+ * @param name extra tag name to add
82
+ * @param value extra tag value to add
83
+ * @param key the value for the <code>config</code> tag
84
+ * @return the plugin
85
+ */
86
+ public static <T > Plugin <T > wrapInstance (T instance , Metrics metrics , String key , String name , String value ) {
87
+ Supplier <Map <String , String >> tagsSupplier = () -> {
88
+ Map <String , String > tags = tags (key , instance );
89
+ tags .put (name , value );
90
+ return tags ;
91
+ };
92
+ return wrapInstance (instance , metrics , tagsSupplier );
51
93
}
52
94
53
95
private static <T > Map <String , String > tags (String key , T instance ) {
@@ -57,6 +99,13 @@ private static <T> Map<String, String> tags(String key, T instance) {
57
99
return tags ;
58
100
}
59
101
102
+ /**
103
+ * Wrap a list of instances into Plugins.
104
+ * @param instances the instances to wrap
105
+ * @param metrics the metrics
106
+ * @param key the value for the <code>config</code> tag
107
+ * @return the list of plugins
108
+ */
60
109
public static <T > List <Plugin <T >> wrapInstances (List <T > instances , Metrics metrics , String key ) {
61
110
List <Plugin <T >> plugins = new ArrayList <>();
62
111
for (T instance : instances ) {
@@ -65,15 +114,6 @@ public static <T> List<Plugin<T>> wrapInstances(List<T> instances, Metrics metri
65
114
return plugins ;
66
115
}
67
116
68
- public static <T > Plugin <T > wrapInstance (T instance , Metrics metrics , Supplier <Map <String , String >> tagsSupplier ) {
69
- PluginMetricsImpl pluginMetrics = null ;
70
- if (instance instanceof Monitorable && metrics != null ) {
71
- pluginMetrics = new PluginMetricsImpl (metrics , tagsSupplier .get ());
72
- ((Monitorable ) instance ).withPluginMetrics (pluginMetrics );
73
- }
74
- return new Plugin <>(instance , pluginMetrics );
75
- }
76
-
77
117
@ Override
78
118
public T get () {
79
119
return instance ;
0 commit comments