Code Monkey home page Code Monkey logo

newrelic-telemetry-sdk-java's Issues

Revisit / Remove the Abstract base builder

The AbstractSenderBuilder in com.newrelic.telemetry use a parameterized builder, but due to the way the current code is written, defines build() to return Object.

This should be cleaned up and refactored to fix this ugliness, but without reintroducing a mass of cut-and-paste code.

Add the ability to copy Attributes

There are a few cases in the sdk (and by the exporter) where having the ability to copy an Attributes instance would be helpful. We should add a method like Attributes.copy() that returns a new instance backed by a new map. Mutations to the resulting copied instance should not mutate the original instance.

Get the poms fully filled out

In order to publish to maven central, we have to make sure the poms contain:

  • project name
  • project description
  • project url
  • license information
  • scm url
  • developer information

This is the message we got when trying to close the sonatype staging thing:

Invalid POM: /com/newrelic/telemetry/telemetry-components/0.2.0/telemetry-components-0.2.0.pom: Project name missing, Project description missing, Project URL missing, License information missing, SCM URL missing, Developer information missing

Change license headers

There is an internal doc that suggests we change the license header in all source from:

/*
 * ---------------------------------------------------------------------------------------------
 *  Copyright (c) 2019 New Relic Corporation. All rights reserved.
 *  Licensed under the Apache 2.0 License. See LICENSE in the project root directory for license information.
 * --------------------------------------------------------------------------------------------
 */

to this new format:

/*
 * Copyright 2019 New Relic Corporation. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

We should just do this all in one go.

Add an audit logging option

Audit logging would be a configuration option, off by default, that, when enabled would log json payloads sent to the API endpoints, at DEBUG level.

Include very clear documentation that if the payloads contain sensitive information that that information would be sent to wherever logs are configured to go.

@@TRACES: MetricBatchJsonGenerator refactor to loosen Metric coupling

The MetricBatchJsonGenerator should be refactored so that it is less dependent on metrics alone. At the end of this refactoring, we should have a class that can marshal any telemetry type (of which there are just metrics right now) to json.

When marshaling metrics, the resulting json should still confirm to the current format.

Add service.name as a first class metric attribute

service.name is a very useful, and almost-always-desired attribute for both metrics and spans. We should make it easy for users to set the service.name attribute on metric batches.

This could be a first-class field on the MetricBatchSender, the MetricBatch itself, or somehow on the metrics. A developer-friendly API should be the first consideration on figuring out the right way to implement this.

Automate release process

Take the manual process and automate it.

The manual process will be documented <Xia has notes, convert to doc. insert link to google doc>

Information does not appear on API despite using URIoverride and api key.

We have managed to create Opentelemetry Spans without much issue and through debugging, it looks like the spans are using New Relic format.
We have tested the API key and the URI successfully with the curl command: https://docs.newrelic.com/docs/understand-dependencies/distributed-tracing/trace-api/report-new-relic-format-traces-trace-api
We are not receiving any errors whether or not we use the URIoverride. We have forced errors by using the wrong keys. Is there a way to troubleshoot this?

Make the version-detection logic more robust

From looking at user-agent metadata, it looks as though the SDK is being pulled into a fat jar, and we're reading the manifest of the fat jar, rather than the original SDK jar.

We're ending up with user-agent strings that look like: "NewRelic-Java-TelemetrySDK/20.6.7029", which is definitely not a version that we've released.

This issue will also apply to all of our java-based exporters that are reading versions from the jar manifest.

Add traces example to `telemetry_examples`

Similar to the existing examples, an example that reports traces should be created (perhaps com.newrelic.telemetry.TracesExample.

This should also include a blurb in the README.md for the telemetry_examples and some clear description/instructions/documentation.

Flesh out the TelemetryClient

  1. Add method to be able to send data without retry logic, returning the Response object to the user with no validation.
  2. Add a method to be able to send data without retry logic, but throw the appropriate ResponseException.
  3. Consider making the creation of the ResponseException, given a Response, a public API.

Verify HTTP connection keep-alive behavior

We need to verify that the default behavior of our TelemetryClient with the OkHttpPoster. Specifically, we should look to confirm that connections are held open (keep alives) to prevent recurring connection setup overhead.

Make examples jar runnable with a main method

Some users might expect the examples jar to be runnable (eg. it has a main class defined in the manifest). The use case is that a new user clones the repo, looks at some docs, reads some code, and then wants to try it out. They build the jar with gradle and then try to run it via java -jar <jar> <insights_key>.

Right now this doesn't work. We should make that better, and include docs.

Restructure `metrics` to allow traces

At present, most of the functionality is within a module called metrics. There is non-metric-specific code in this module (HttpPoster and Attributes, for example). So, in order to better accommodate support for Traces, we should do some project restructuring and decide how to proceed (not yet sure which would be best).

Idea 1: Rename metrics to telemetry-core

Pros: Simple change, no code has to move. Traces can sit next to Metrics in the same source module.

Cons: Docs/deps change. Published artifact names change.

Idea 2: Add modules telemetry-core and traces

Common/core code that can be shared between telemetry types would be moved into this new "core" module. Establishes a pattern in which each telemetry type has its own module, and these modules depend on the core,

Pros: Simple. Metrics artifact doesn't need to change.

Cons: Increased number of modules. Increased dependency tree complexity.

Idea 3: Put Traces into the metrics module

Pros: Least amount of work

Cons: Naming will be wrong. Starts a pattern which will be harder to break when other telemetry types come into play.

Marshal spans to JSON

We don't yet have the ability to generate a json payload for the traces (spans) ingest API. We should make a data model and appropriate marshalers that can create this JSON.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.