/** * {@inheritDoc} */ @Override public void update(ICoreService coreService) { long sensorTypeIdent = sensorTypeConfig.getId(); long currentTime = System.currentTimeMillis(); // Check if the collectData method should be invoked if (MapUtils.isNotEmpty(activeServerMap) && ((currentTime - lastDataCollectionTimestamp) > DATA_COLLECT_INTERVAL)) { // store the invocation timestamp lastDataCollectionTimestamp = System.currentTimeMillis(); for (MBeanServerHolder holder : activeServerMap.values()) { collectData(holder, coreService, sensorTypeIdent); } } }
/** * {@inheritDoc} */ @Override public String toString() { return getId() + " :: class: " + getClassName(); }
/** * {@inheritDoc} */ public void init(JmxSensorTypeConfig sensorTypeConfig) { this.sensorTypeConfig = sensorTypeConfig; // check for forcing server creation Map<String, Object> parameters = sensorTypeConfig.getParameters(); if (MapUtils.isNotEmpty(parameters)) { if (Boolean.TRUE.equals(parameters.get("forceMBeanServer"))) { // create only, get it via hook MBeanServer server = ManagementFactory.getPlatformMBeanServer(); mbeanServerAdded(server); } } }
/** * Creates the agent based {@link JmxAttributeDescriptor} with correctly registered ID. * * @param platformId * ID of the agent. * @param jmxSensorConfig * {@link JmxAttributeDescriptor} defined in the {@link Environment}. * @return {@link JmxSensorTypeConfig}. */ private JmxSensorTypeConfig getJmxSensorTypeConfig(long platformId, JmxSensorConfig jmxSensorConfig) { long id = registrationService.registerJmxSensorTypeIdent(platformId, jmxSensorConfig.getClassName()); JmxSensorTypeConfig jmxSensorTypeConfig = new JmxSensorTypeConfig(); jmxSensorTypeConfig.setId(id); jmxSensorTypeConfig.setClassName(jmxSensorConfig.getClassName()); jmxSensorTypeConfig.setParameters(jmxSensorConfig.getParameters()); return jmxSensorTypeConfig; }
@SuppressWarnings("unchecked") @Test public void configureJmxSensor() throws Exception { long agentId = 13L; long sensorId = 17L; String className = "className"; Map<String, Object> parameters = Collections.<String, Object> singletonMap("key", "value"); JmxSensorConfig jmxSensorConfig = mock(JmxSensorConfig.class); when(jmxSensorConfig.getClassName()).thenReturn(className); when(jmxSensorConfig.getParameters()).thenReturn(parameters); when(jmxSensorConfig.isActive()).thenReturn(true); when(environment.getJmxSensorConfig()).thenReturn(jmxSensorConfig); when(registrationService.registerJmxSensorTypeIdent(agentId, className)).thenReturn(sensorId); AgentConfig agentConfiguration = creator.environmentToConfiguration(environment, agentId); JmxSensorTypeConfig sensorTypeConfig = agentConfiguration.getJmxSensorTypeConfig(); assertThat(sensorTypeConfig.getId(), is(sensorId)); assertThat(sensorTypeConfig.getClassName(), is(className)); assertThat(sensorTypeConfig.getParameters(), is(parameters)); verify(registrationService).registerJmxSensorTypeIdent(agentId, className); // needed because of the intercepting server sensor verify(registrationService, times(3)).registerMethodSensorTypeIdent(anyLong(), anyString(), anyMap()); verifyNoMoreInteractions(registrationService); }
/** * {@inheritDoc} */ @Override public void afterPropertiesSet() throws Exception { for (JmxSensorTypeConfig config : configurationStorage.getJmxSensorTypes()) { if (config.getClassName().equals(this.getClass().getName())) { this.init(config); break; } } }
className = jmxSensorTypeConfig.getClassName(); beanName = "jmxSensorType[" + className + "]"; registerBeanDefinitionAndInitialize(beanName, className);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
@Test public void serverCreationForced() throws Exception { when(sensorTypeConfig.getParameters()).thenReturn(Collections.<String, Object> singletonMap("forceMBeanServer", Boolean.TRUE)); jmxSensor.init(sensorTypeConfig); // assert that field in Management factory has been created Field field = ManagementFactory.class.getDeclaredField("platformMBeanServer"); field.setAccessible(true); Object server = field.get(null); assertThat(server, is(notNullValue())); }
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
ObjectName objectName = new ObjectName(testObjectName); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);
verify(mBeanServer).addNotificationListener(Matchers.<ObjectName> any(), notificationListener.capture(), Matchers.<NotificationFilter> any(), eq(null)); when(sensorTypeConfig.getId()).thenReturn(sensorType); when(mBeanServer.queryNames(Matchers.<ObjectName> any(), (QueryExp) eq(null))).thenReturn(Collections.singleton(objectName)); when(mBeanServer.getMBeanInfo(Matchers.<ObjectName> any())).thenReturn(mBeanInfo);