Search in sources :

Example 6 with CustomInsightsEvent

use of com.newrelic.agent.model.CustomInsightsEvent in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method testWithTransaction_JAVA2614Regression.

@Test
public void testWithTransaction_JAVA2614Regression() throws Exception {
    String appName = "Dude";
    Map<String, Object> config = new HashMap<>();
    config.put(AgentConfigImpl.APP_NAME, appName);
    config.put("custom_insights_events.max_samples_stored", 2);
    config.put("token_timeout", 180);
    HarvestService harvestService = Mockito.mock(HarvestService.class);
    ServiceFactory.setServiceManager(Mockito.mock(ServiceManager.class));
    Mockito.when(ServiceFactory.getServiceManager().getHarvestService()).thenReturn(harvestService);
    TransactionService txService = Mockito.mock(TransactionService.class);
    Mockito.when(ServiceFactory.getServiceManager().getTransactionService()).thenReturn(txService);
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager()).thenReturn(Mockito.mock(RPMServiceManager.class));
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService()).thenReturn(Mockito.mock(RPMService.class));
    Mockito.when(ServiceFactory.getServiceManager().getConfigService()).thenReturn(Mockito.mock(ConfigService.class));
    Mockito.when(ServiceFactory.getServiceManager().getConfigService().getDefaultAgentConfig()).thenReturn(AgentConfigImpl.createAgentConfig(config));
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService().getApplicationName()).thenReturn(appName);
    Transaction transaction = Mockito.mock(Transaction.class);
    Mockito.when(txService.getTransaction(false)).thenReturn(transaction);
    TransactionInsights txInsights = new TransactionInsights(AgentConfigImpl.createAgentConfig(Collections.<String, Object>emptyMap()));
    Mockito.when(transaction.getInsightsData()).thenReturn(txInsights);
    Mockito.when(transaction.getApplicationName()).thenReturn(appName);
    Mockito.when(transaction.isInProgress()).thenReturn(true);
    InsightsServiceImpl insights = new InsightsServiceImpl();
    insights.start();
    insights.recordCustomEvent("everything", ImmutableMap.<String, Object>of("is", 5, "awesome", true, "key1", Whatever.ONE_THING, "key2", Whatever.ANOTHER_THING));
    // JAVA-2614 - null values as recordCustomEvent arguments for eventType or the attribute Map's key/value result
    // in an NPE being thrown. The following five API calls will cause an NPE if we have reintroduced the problem.
    Map<String, String> m;
    m = Collections.singletonMap("key", "value");
    insights.recordCustomEvent(null, m);
    m = Collections.singletonMap(null, null);
    insights.recordCustomEvent("bothNull", m);
    m = Collections.singletonMap("key", null);
    insights.recordCustomEvent("valueNull", m);
    m = Collections.singletonMap(null, "value");
    insights.recordCustomEvent("keyNull", m);
    m = new HashMap<>();
    m.put("goodKey1", "goodValue");
    m.put("goodKey2", null);
    m.put(null, null);
    insights.recordCustomEvent("AllKeyValueCombos", m);
    MockRPMService analyticsData = new MockRPMService();
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService(appName)).thenReturn(analyticsData);
    assertEquals(0, analyticsData.getEvents().size());
    assertEquals(5, txInsights.events.size());
    CustomInsightsEvent customEvent = txInsights.events.poll();
    assertNotNull(customEvent);
    assertEquals(Whatever.ONE_THING.toString(), customEvent.getUserAttributesCopy().get("key1"));
    Writer writer = new StringWriter();
    customEvent.writeJSONString(writer);
    String json = writer.toString();
    assertNotNull(json);
    // JAVA-2614 - through 3.33, attribute values that were not JSON types would cause the Agent
    // to generate invalid JSON. We check for this by attempting to parse the JSON. If an exception
    // occurs in the line below, we have reintroduced the problem and are generating invalid JSON.
    // The assert may be useful, but is really just to ensure the parse actually occurs. N.B.: we
    // need to make the outer JSON look like a JSON object for the GSON parser to accept it.
    json = "{ 'x':" + json + "}";
    Reader reader = new InputStreamReader(new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)));
    assertNotNull(new Gson().fromJson(reader, Object.class));
}
Also used : HarvestService(com.newrelic.agent.HarvestService) TransactionService(com.newrelic.agent.TransactionService) InputStreamReader(java.io.InputStreamReader) HashMap(java.util.HashMap) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) Gson(com.google.gson.Gson) TransactionInsights(com.newrelic.agent.service.analytics.InsightsServiceImpl.TransactionInsights) RPMServiceManager(com.newrelic.agent.RPMServiceManager) CustomInsightsEvent(com.newrelic.agent.model.CustomInsightsEvent) ConfigService(com.newrelic.agent.config.ConfigService) Transaction(com.newrelic.agent.Transaction) StringWriter(java.io.StringWriter) ByteArrayInputStream(java.io.ByteArrayInputStream) MockServiceManager(com.newrelic.agent.MockServiceManager) RPMServiceManager(com.newrelic.agent.RPMServiceManager) ServiceManager(com.newrelic.agent.service.ServiceManager) MockRPMService(com.newrelic.agent.MockRPMService) RPMService(com.newrelic.agent.RPMService) MockRPMService(com.newrelic.agent.MockRPMService) StringWriter(java.io.StringWriter) Writer(java.io.Writer) Test(org.junit.Test)

Example 7 with CustomInsightsEvent

use of com.newrelic.agent.model.CustomInsightsEvent in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method checkForEvent.

public void checkForEvent() {
    StatsEngine statsEngineForHarvest = ServiceFactory.getStatsService().getStatsEngineForHarvest(EventTestHelper.APP_NAME);
    assertTrue(statsEngineForHarvest.getStats(MetricName.create(MetricNames.SUPPORTABILITY_INSIGHTS_SERVICE_CUSTOMER_SEEN)).hasData());
    assertTrue(statsEngineForHarvest.getStats(MetricName.create(MetricNames.SUPPORTABILITY_INSIGHTS_SERVICE_CUSTOMER_SENT)).hasData());
    assertEquals(1, ((MockRPMService) ServiceFactory.getRPMService()).getEvents().size());
    CustomInsightsEvent customEvent = (CustomInsightsEvent) Iterables.get(((MockRPMService) ServiceFactory.getRPMService()).getEvents(), 0);
    assertEquals("CustomEvent", customEvent.getType());
}
Also used : StatsEngine(com.newrelic.agent.stats.StatsEngine) MockRPMService(com.newrelic.agent.MockRPMService) CustomInsightsEvent(com.newrelic.agent.model.CustomInsightsEvent)

Example 8 with CustomInsightsEvent

use of com.newrelic.agent.model.CustomInsightsEvent in project newrelic-java-agent by newrelic.

the class DataCollectionConfigCrossAgentTest method createAndVerifyCustomEvent.

private void createAndVerifyCustomEvent(Long expectedCount, Long expectedEndpointCount) {
    InsightsServiceImpl insightsService = new InsightsServiceImpl();
    serviceManager.setInsights(insightsService);
    long eventsToCreate = 1;
    if (expectedCount > 1) {
        eventsToCreate = expectedCount;
    }
    for (long i = 0; i < eventsToCreate; i++) {
        insightsService.recordCustomEvent("Custom", Collections.<String, Object>emptyMap());
    }
    // Verify that the correct number of events were stored in the reservoir
    DistributedSamplingPriorityQueue<CustomInsightsEvent> eventQueue = insightsService.getReservoir(APP_NAME);
    assertNotNull(eventQueue);
    assertEquals(expectedCount.intValue(), eventQueue.size());
    // Verify that we sent (or didn't send) the appropriate events
    insightsService.harvestEvents(APP_NAME);
    int customEventsSeen = rpmService.getCustomEventsSeen();
    assertEquals(expectedEndpointCount.intValue(), customEventsSeen);
}
Also used : InsightsServiceImpl(com.newrelic.agent.service.analytics.InsightsServiceImpl) CustomInsightsEvent(com.newrelic.agent.model.CustomInsightsEvent)

Aggregations

CustomInsightsEvent (com.newrelic.agent.model.CustomInsightsEvent)8 MockRPMService (com.newrelic.agent.MockRPMService)2 StatsEngine (com.newrelic.agent.stats.StatsEngine)2 HashMap (java.util.HashMap)2 Gson (com.google.gson.Gson)1 HarvestService (com.newrelic.agent.HarvestService)1 MockServiceManager (com.newrelic.agent.MockServiceManager)1 RPMService (com.newrelic.agent.RPMService)1 RPMServiceManager (com.newrelic.agent.RPMServiceManager)1 Transaction (com.newrelic.agent.Transaction)1 TransactionService (com.newrelic.agent.TransactionService)1 AttributeSender (com.newrelic.agent.attributes.AttributeSender)1 ConfigService (com.newrelic.agent.config.ConfigService)1 Event (com.newrelic.agent.introspec.Event)1 AnalyticsEvent (com.newrelic.agent.model.AnalyticsEvent)1 ServiceManager (com.newrelic.agent.service.ServiceManager)1 InsightsServiceImpl (com.newrelic.agent.service.analytics.InsightsServiceImpl)1 TransactionInsights (com.newrelic.agent.service.analytics.InsightsServiceImpl.TransactionInsights)1 StatsWork (com.newrelic.agent.stats.StatsWork)1 HttpError (com.newrelic.agent.transport.HttpError)1