1
1
package eu .xenit .alfred .telemetry .solr .monitoring .binder ;
2
2
3
3
import io .micrometer .core .instrument .Gauge ;
4
- import io .micrometer .core .instrument .MeterRegistry ;
5
4
import io .micrometer .core .instrument .Tags ;
6
5
import io .micrometer .core .instrument .binder .MeterBinder ;
7
- import java .io .IOException ;
8
- import java .util .Map .Entry ;
9
6
import org .alfresco .solr .AlfrescoCoreAdminHandler ;
10
7
import org .alfresco .solr .SolrInformationServer ;
11
8
import org .alfresco .solr .tracker .TrackerRegistry ;
12
9
import org .slf4j .Logger ;
13
10
import org .slf4j .LoggerFactory ;
14
11
15
- public class SolrCoreStatsMetrics implements MeterBinder {
12
+ import java .io .IOException ;
13
+ import java .util .Map .Entry ;
14
+
15
+ public class SolrCoreStatsMetrics extends AbstractSolrMetrics implements MeterBinder {
16
16
17
17
private static final String METER_ALFRESCO_NODES = "alfresco.nodes" ;
18
18
private static final String TAG_STATE = "state" ;
19
19
private static final String TAG_VALUE_INDEXED = "Indexed" ;
20
20
21
- private final AlfrescoCoreAdminHandler coreAdminHandler ;
22
- private MeterRegistry registry ;
23
21
24
22
private static final Logger logger = LoggerFactory .getLogger (SolrCoreStatsMetrics .class );
25
23
26
24
public SolrCoreStatsMetrics (AlfrescoCoreAdminHandler coreAdminHandler ) {
27
- this . coreAdminHandler = coreAdminHandler ;
25
+ super ( coreAdminHandler ) ;
28
26
}
29
27
30
- private void registerCoreStats () {
31
- TrackerRegistry trackerRegistry = coreAdminHandler .getTrackerRegistry ();
32
-
33
- while (trackerRegistry .getCoreNames ().size () == 0 ) {
34
- logger .error ("Solr did not start tracking yet, waiting 10sec" );
35
- try {
36
- Thread .currentThread ().sleep (10_000 );
37
- trackerRegistry = coreAdminHandler .getTrackerRegistry ();
38
- } catch (InterruptedException e ) {
39
- logger .error ("Fail to wait 10 sec" , e );
40
- }
41
- }
28
+ @ Override
29
+ protected void registerMetrics () {
30
+ TrackerRegistry trackerRegistry = getTrackerRegistryWhenAvailable ();
42
31
43
32
for (String coreName : trackerRegistry .getCoreNames ()) {
44
- SolrInformationServer server = (SolrInformationServer ) coreAdminHandler .getInformationServers ()
45
- .get (coreName );
46
-
47
33
Tags tags = Tags .of ("core" , coreName , TAG_STATE , TAG_VALUE_INDEXED );
48
- Gauge .builder (METER_ALFRESCO_NODES , server ,
49
- x -> getCoreStat (server , "Alfresco Nodes in Index" ))
34
+ Gauge .builder (METER_ALFRESCO_NODES , coreAdminHandler ,
35
+ x -> getCoreStat (x , coreName , "Alfresco Nodes in Index" ))
50
36
.tags (tags )
51
37
.register (registry );
52
38
53
39
tags = Tags .of ("core" , coreName , TAG_STATE , "Unindexed" );
54
- Gauge .builder (METER_ALFRESCO_NODES , server ,
55
- x -> getCoreStat (server , "Alfresco Unindexed Nodes" ))
40
+ Gauge .builder (METER_ALFRESCO_NODES , coreAdminHandler ,
41
+ x -> getCoreStat (x , coreName , "Alfresco Unindexed Nodes" ))
56
42
.tags (tags )
57
43
.register (registry );
58
44
59
45
tags = Tags .of ("core" , coreName , TAG_STATE , "Error" );
60
- Gauge .builder (METER_ALFRESCO_NODES , trackerRegistry ,
61
- x -> getCoreStat (server , "Alfresco Error Nodes in Index" ))
46
+ Gauge .builder (METER_ALFRESCO_NODES , coreAdminHandler ,
47
+ x -> getCoreStat (x , coreName , "Alfresco Error Nodes in Index" ))
62
48
.tags (tags )
63
49
.register (registry );
64
50
65
51
tags = Tags .of ("core" , coreName , TAG_STATE , TAG_VALUE_INDEXED );
66
- Gauge .builder ("alfresco.acls" , trackerRegistry ,
67
- x -> getCoreStat (server , "Alfresco Acls in Index" ))
52
+ Gauge .builder ("alfresco.acls" , coreAdminHandler ,
53
+ x -> getCoreStat (x , coreName , "Alfresco Acls in Index" ))
68
54
.tags (tags )
69
55
.register (registry );
70
56
71
57
tags = Tags .of ("core" , coreName , TAG_STATE , "States" );
72
- Gauge .builder ("alfresco.states" , trackerRegistry ,
73
- x -> getCoreStat (server , "Alfresco States in Index" ))
58
+ Gauge .builder ("alfresco.states" , coreAdminHandler ,
59
+ x -> getCoreStat (x , coreName , "Alfresco States in Index" ))
74
60
.tags (tags )
75
61
.register (registry );
76
62
77
63
// technically these metrics are not per core, but in order to filter in grafana the core is added as a tag
78
64
tags = Tags .of ("core" , coreName , TAG_STATE , TAG_VALUE_INDEXED );
79
- Gauge .builder ("alfresco.transactions.nodes" , trackerRegistry ,
80
- x -> getCoreStat (server , "Alfresco Transactions in Index" ))
65
+ Gauge .builder ("alfresco.transactions.nodes" , coreAdminHandler ,
66
+ x -> getCoreStat (x , coreName , "Alfresco Transactions in Index" ))
81
67
.tags (tags )
82
68
.register (registry );
83
69
84
70
tags = Tags .of ("core" , coreName , TAG_STATE , TAG_VALUE_INDEXED );
85
- Gauge .builder ("alfresco.transactions.acls" , trackerRegistry ,
86
- x -> getCoreStat (server , "Alfresco Acl Transactions in Index" ))
71
+ Gauge .builder ("alfresco.transactions.acls" , coreAdminHandler ,
72
+ x -> getCoreStat (x , coreName , "Alfresco Acl Transactions in Index" ))
87
73
.tags (tags )
88
74
.register (registry );
89
75
90
76
}
91
77
}
92
78
93
79
94
- private long getCoreStat (SolrInformationServer server , String key ) {
80
+ private static long getCoreStat (AlfrescoCoreAdminHandler coreAdminHandler , String coreName , String key ) {
81
+ SolrInformationServer server = (SolrInformationServer ) coreAdminHandler .getInformationServers ()
82
+ .get (coreName );
95
83
try {
96
84
for (Entry <String , Object > entry : server .getCoreStats ()) {
97
85
if (key .equals (entry .getKey ())) {
@@ -104,9 +92,4 @@ private long getCoreStat(SolrInformationServer server, String key) {
104
92
return -1 ;
105
93
}
106
94
107
- @ Override
108
- public void bindTo (MeterRegistry registry ) {
109
- this .registry = registry ;
110
- registerCoreStats ();
111
- }
112
95
}
0 commit comments