/** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = 1; result = (prime * result) + ((this.agentConnection == null) ? 0 : this.agentConnection.hashCode()); result = (prime * result) + (int) (this.connectionTimestamp ^ (this.connectionTimestamp >>> 32)); result = (prime * result) + ((this.instrumentationStatus == null) ? 0 : this.instrumentationStatus.hashCode()); result = (prime * result) + (int) (this.lastDataSendTimestamp ^ (this.lastDataSendTimestamp >>> 32)); result = (prime * result) + (int) (this.lastKeepAliveTimestamp ^ (this.lastKeepAliveTimestamp >>> 32)); result = (prime * result) + (int) (this.pendingSinceTime ^ (this.pendingSinceTime >>> 32)); result = (prime * result) + (int) (this.serverTimestamp ^ (this.serverTimestamp >>> 32)); return result; }
/** * Sets {@link #businessTransactions}. * * @param businessTransactions * A collection of {@link BusinessTransactionData} instances. */ public void setBusinessTransactions(Collection<BusinessTransactionData> businessTransactions) { for (BusinessTransactionData businessTx : businessTransactions) { this.businessTransactions.put(new Pair<Integer, Integer>(businessTx.getApplication().getId(), businessTx.getId()), businessTx); this.applications.put(businessTx.getApplication().getId(), businessTx.getApplication()); } }
/** * Registers that the agent is not sending keep-alive messages anymore. * * @param platformIdent * ID of the platform ident. */ public void registerKeepAliveTimeout(long platformIdent) { AgentStatusData agentStatusData = agentStatusDataMap.get(platformIdent); if (null != agentStatusData) { agentStatusData.setAgentConnection(AgentConnection.NO_KEEP_ALIVE); } }
/** * Assigns the business context to the passed {@link InvocationSequenceData} instance. * * @param invocSequence * {@link InvocationSequenceData} instance to assign the business context for. */ private void assignBusinessContext(InvocationSequenceData invocSequence) { List<ApplicationDefinition> applicationDefinitions = configurationInterfaceService.getApplicationDefinitions(); ApplicationDefinition appDefinition = identify(invocSequence, applicationDefinitions); if (null == appDefinition) { appDefinition = ApplicationDefinition.DEFAULT_APPLICATION_DEFINITION; } ApplicationData application = businessContextRegistryService.registerApplication(appDefinition); invocSequence.setApplicationId(application.getId()); BusinessTransactionDefinition businessTxDefinition = identify(invocSequence, appDefinition.getBusinessTransactionDefinitions()); String businessTxName = businessTxDefinition.determineBusinessTransactionName(invocSequence, cachedDataService); BusinessTransactionData businessTransaction = businessContextRegistryService.registerBusinessTransaction(application, businessTxDefinition, businessTxName); invocSequence.setBusinessTransactionId(businessTransaction.getId()); }
/** * {@inheritDoc} */ @Override public BusinessTransactionData registerBusinessTransaction(ApplicationData application, BusinessTransactionDefinition businessTransactionDefinition, String businessTransactionName) { int businessTxId = deriveInstanceId(businessTransactionName, businessTransactionDefinition.getId()); BusinessTransactionData businessTransaction = getBusinessTransactionForId(application.getId(), businessTxId); if (null == businessTransaction) { businessTransaction = new BusinessTransactionData(businessTxId, businessTransactionDefinition.getId(), application, businessTransactionName); Pair<Integer, Integer> key = new Pair<Integer, Integer>(application.getId(), businessTransaction.getId()); BusinessTransactionData existingBusinessTx = businessTransactions.putIfAbsent(key, businessTransaction); if (null != existingBusinessTx) { businessTransaction = existingBusinessTx; } } return businessTransaction; }
/** * {@inheritDoc} */ @Override protected void addTags(InvocationSequenceData data, Builder builder) { super.addTags(data, builder); String businessTxName = BusinessTransactionDefinition.UNKNOWN_BUSINESS_TX; String applicationName = ApplicationDefinition.UNKNOWN_APP; BusinessTransactionData businessTx = cachedDataService.getBusinessTransactionForId(data.getApplicationId(), data.getBusinessTransactionId()); if (null != businessTx) { businessTxName = businessTx.getName(); applicationName = businessTx.getApplication().getName(); } builder.tag(Series.BusinessTransaction.TAG_APPLICATION_NAME, applicationName); builder.tag(Series.BusinessTransaction.TAG_BUSINESS_TRANSACTION_NAME, businessTxName); }
/** * {@inheritDoc} */ @Override public Collection<BusinessTransactionData> getBusinessTransactions(int applicationId) { Set<BusinessTransactionData> resultSet = new HashSet<>(); for (BusinessTransactionData businessTx : businessTransactions.values()) { if (businessTx.getApplication().getId() == applicationId) { resultSet.add(businessTx); } } return resultSet; }
@BeforeMethod public void initialize() throws BusinessException { firstApplication = new ApplicationData(FIRST_APPLICATION_ID, FIRST_APPLICATION_ID, "firstApplication"); firstBusinessTx = new BusinessTransactionData(FIRST_BUSINESS_TX_ID, FIRST_BUSINESS_TX_ID, firstApplication, "firstBusinessTx"); secondBusinessTx = new BusinessTransactionData(SECOND_BUSINESS_TX_ID, SECOND_BUSINESS_TX_ID, firstApplication, "secondBusinessTx"); secondApplication = new ApplicationData(SECOND_APPLICATION_ID, SECOND_APPLICATION_ID, "secondApplication"); thirdBusinessTx = new BusinessTransactionData(THIRD_BUSINESS_TX_ID, THIRD_BUSINESS_TX_ID, secondApplication, "thirdBusinessTx"); List<BusinessTransactionData> businessTxs = new ArrayList<>(); businessTxs.add(firstBusinessTx); businessTxs.add(secondBusinessTx); businessTxs.add(thirdBusinessTx); List<ApplicationData> applications = new ArrayList<>(); applications.add(firstApplication); applications.add(secondApplication); when(businessContextService.getBusinessTransactions()).thenReturn(businessTxs); when(businessContextService.getApplications()).thenReturn(applications); }
/** * Registers that the agent was connected. * * @param platformIdent * ID of the platform ident. */ public void registerConnected(long platformIdent) { AgentStatusData agentStatusData = agentStatusDataMap.get(platformIdent); if (null == agentStatusData) { agentStatusData = new AgentStatusData(AgentConnection.CONNECTED); AgentStatusData existing = agentStatusDataMap.putIfAbsent(platformIdent, agentStatusData); if (null != existing) { agentStatusData = existing; } } long currentTimeMillis = System.currentTimeMillis(); agentStatusData.setLastKeepAliveTimestamp(currentTimeMillis); agentStatusData.setConnectionTimestamp(currentTimeMillis); agentStatusData.setAgentConnection(AgentConnection.CONNECTED); agentStatusData.setPendingSinceTime(currentTimeMillis); // set instrumentation status up-to-date agentStatusData.setInstrumentationStatus(InstrumentationStatus.UP_TO_DATE); }
/** * {@inheritDoc} */ @Override public ApplicationData registerApplication(ApplicationDefinition applicationDefinition) { int applicationId = deriveInstanceId(applicationDefinition.getApplicationName(), applicationDefinition.getId()); ApplicationData application = getApplicationForId(applicationId); if (null == application) { application = new ApplicationData(applicationId, applicationDefinition.getId(), applicationDefinition.getApplicationName()); ApplicationData existingApplication = applications.putIfAbsent(applicationId, application); if (null != existingApplication) { application = existingApplication; } } return application; }
/** * {@inheritDoc} */ @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { if (receiver instanceof AgentLeaf) { AgentLeaf agentLeaf = (AgentLeaf) receiver; if ("canDelete".equals(property)) { return (null == agentLeaf.getAgentStatusData()) || (agentLeaf.getAgentStatusData().getAgentConnection() != AgentConnection.CONNECTED); } } return false; }
/** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = 1; result = (prime * result) + ((this.application == null) ? 0 : this.application.hashCode()); result = (prime * result) + this.businessTransactionDefinitionId; result = (prime * result) + this.id; result = (prime * result) + ((this.name == null) ? 0 : this.name.hashCode()); return result; }
/** * Registers the time when last data was received for a given platform ident. * * @param platformIdent * ID of the platform ident. */ public void registerDataSent(long platformIdent) { AgentStatusData agentStatusData = agentStatusDataMap.get(platformIdent); if (null != agentStatusData) { agentStatusData.setLastDataSendTimestamp(System.currentTimeMillis()); } }
/** * Reloads the business context data. */ private void refreshBusinessContext() { applicationMap.clear(); businessTransactionsMap.clear(); for (BusinessTransactionData businessTx : businessContextService.getBusinessTransactions()) { businessTransactionsMap.put(new Pair<Integer, Integer>(businessTx.getApplication().getId(), businessTx.getId()), businessTx); } for (ApplicationData application : businessContextService.getApplications()) { applicationMap.put(application.getId(), application); } }
@Test public void matchEmptyApplication() { StringMatchingExpression stringMatchingExpression = new StringMatchingExpression(PatternMatchingType.CONTAINS, "root"); stringMatchingExpression.setStringValueSource(stringValueSource); stringMatchingExpression.setSearchNodeInTrace(false); StringMatchingExpression stringMatchingExpression_2 = new StringMatchingExpression(PatternMatchingType.CONTAINS, "nothing"); stringMatchingExpression_2.setStringValueSource(stringValueSource); stringMatchingExpression_2.setSearchNodeInTrace(false); applicationDefinition.setMatchingRuleExpression(stringMatchingExpression_2); applicationDefinition_empty.setMatchingRuleExpression(stringMatchingExpression); processor.process(root, entityManager); assertThat(root.getApplicationId(), equalTo(application_empty.getId())); assertThat(root.getBusinessTransactionId(), equalTo(businessTx_unknown.getId())); }
/** * {@inheritDoc} */ @Override public Collection<BusinessTransactionData> getBusinessTransactions(int applicationId) { Set<BusinessTransactionData> result = new HashSet<>(); for (BusinessTransactionData businessTx : businessTransactions.values()) { if (businessTx.getApplication().getId() == applicationId) { result.add(businessTx); } } return result; }
/** * Verify equals contract test. * * @param clazz * Class to test. */ @Test(dataProvider = "classProvider") public void equalsContract(Class<?> clazz) { EqualsVerifier.forClass(clazz).usingGetClass().withPrefabValues(Timestamp.class, new Timestamp(1), new Timestamp(2)) .withPrefabValues(ExceptionSensorData.class, new ExceptionSensorData(new Timestamp(1), 1, 1, 1), new ExceptionSensorData(new Timestamp(2), 2, 2, 2)) .withPrefabValues(InvocationSequenceData.class, new InvocationSequenceData(new Timestamp(1), 1, 1, 1), new InvocationSequenceData(new Timestamp(2), 2, 2, 2)).withRedefinedSuperclass() .withPrefabValues(ApplicationData.class, new ApplicationData(1, 1, "name1"), new ApplicationData(2, 2, "name2")).withPrefabValues(BusinessTransactionData.class, new BusinessTransactionData(1, 1, new ApplicationData(1, 1, "name1"), "name1"), new BusinessTransactionData(2, 2, new ApplicationData(2, 2, "name2"), "name2")) .suppress(Warning.NONFINAL_FIELDS).suppress(Warning.TRANSIENT_FIELDS).verify(); }
/** * Registers that the agent has been disconnected. * * @param platformIdent * ID of the platform ident. * @return Returns <code>true</code> if the agent has been marked as disconnected, * <code>false</code> if the agent with given ID does not exist. */ public boolean registerDisconnected(long platformIdent) { AgentStatusData agentStatusData = agentStatusDataMap.get(platformIdent); if (null != agentStatusData) { agentStatusData.setAgentConnection(AgentConnection.DISCONNECTED); return true; } else { return false; } }
@Test public void businessContextChanged() throws InterruptedException { StringMatchingExpression stringMatchingExpression = new StringMatchingExpression(PatternMatchingType.CONTAINS, "root"); stringMatchingExpression.setStringValueSource(stringValueSource); stringMatchingExpression.setSearchNodeInTrace(false); StringMatchingExpression stringMatchingExpression_2 = new StringMatchingExpression(PatternMatchingType.CONTAINS, "node"); stringMatchingExpression_2.setStringValueSource(stringValueSource); stringMatchingExpression_2.setSearchNodeInTrace(false); applicationDefinition.setMatchingRuleExpression(stringMatchingExpression); businessTxDefinition_1.setMatchingRuleExpression(stringMatchingExpression_2); processor.onApplicationEvent(event); assertThat(root.getApplicationId(), equalTo(application.getId())); assertThat(root.getBusinessTransactionId(), equalTo(businessTx_1.getId())); }