Coder Social home page Coder Social logo

newrelic-react-native-agent-fix's Introduction

New Relic React Native Agent

This agent uses native New Relic Android and iOS agents to instrument the React-Native Javascript environment. The New Relic SDKs collect crashes, network traffic, and other information for hybrid apps using native components.

NOTE: This agent SDK is not yet officially supported. If you’re interested in participating in our early access program, contact Support or your account representative.

Features

  • Capture JavaScript errors
  • Network Instrumentation
  • Distributed Tracing
  • Tracking console log, warn and error
  • Promise rejection tracking
  • Capture interactions and the sequence in which they were created
  • Pass user information to New Relic to track user sessions
  • Expo Support (Bare Workflow & Managed Workflow)

Current Support:

  • Android API 21+
  • iOS 10
  • Depends on New Relic iOS/XCFramework and Android agents

Native support levels are based on React Native requirements.

Requirements

Installation

Yarn

yarn add newrelic-react-native-agent

NPM

npm i newrelic-react-native-agent

React Native Setup

Now open your index.js and add the following code to launch NewRelic (don't forget to put proper application tokens):

import NewRelic from 'newrelic-react-native-agent';
import * as appVesrion from './package.json';
import {Platform} from 'react-native';

    let appToken;

    if (Platform.OS === 'ios') {
        appToken = '<IOS-APP-TOKEN>';
    } else {
        appToken = '<ANDROID-APP-TOKEN>';
    }


NewRelic.startAgent(appToken);
NewRelic.setJSAppVersion(appVesrion.version);

AppToken is platform-specific. You need to generate the seprate token for Android and iOS apps.

Android Setup

  1. Install the New Relic native Android agent (instructions here).
  2. Update build.gradle:
  buildscript {
    ...
    repositories {
      ...
      mavenCentral()
    }
    dependencies {
      ...
      classpath "com.newrelic.agent.android:agent-gradle-plugin:6.5.0"
    }
  }
  1. Update app/build.gradle:
  apply plugin: "com.android.application"
  apply plugin: 'newrelic' // <-- add this

  1. Make sure your app requests INTERNET and ACCESS_NETWORK_STATE permissions by adding these lines to your AndroidManifest.xml
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

iOS Setup

Run the following, and it will install the New Relic XCFramework agent:

  npx pod-install

AutoLinking and rebuilding

  • Once the above steps have been completed, the React Native NewRelic library must be linked to your project and your application needs to be rebuilt. If you use React Native 0.60+, you automatically have access to "autolinking," requiring no further manual installation steps.

To automatically link the package, rebuild your project:

# Android apps
npx react-native run-android

# iOS apps
cd ios/
pod install --repo-update
cd ..
npx react-native run-ios

If you run following commands then Fatal JS erros will show up as a crash in NR.

npx react-native run-ios --configuration Release

npx react-native run-android --variant=release

Expo

Integration with Expo is possible in both bare workflow and custom managed workflow via config plugins.

  • Bare Workflow: Please follow the above installation steps instead.
  • Managed Workflow: After installing our package, add the config plugin to the plugins array of your app.json or app.config.js.
{
  "name": "my app",
  "plugins": ["newrelic-react-native-agent"]
}

After this, you need to use the expo prebuild --clean command as described in the "Adding custom native code"guide to rebuild your app with the plugin changes. If this command is not running, you'll get errors when starting the New Relic agent.

Usage

See the examples below, and for more detail, see New Relic IOS SDK doc or Android SDK.

startInteraction(interactionName: string): Promise<InteractionId>;

Track a method as an interaction.

InteractionId is string.

setInteractionName(interactionName: string): void;

Name or rename interaction (Android-specific).

endInteraction(id: InteractionId): void;

End an interaction (Required). This uses the string ID for the interaction you want to end. This string is returned when you use startInteraction().

var HttpDemo_id = NewRelic.startInteraction("HttpDemo");

return(
  <View style = {main.container}>
  <Text>Select the below buttons. Background your application and the data will arrive in NR.</Text>
  <Button style = {button_blue.blue} title="Good Http Request" onPress= {() => goodRequest()} />
  <Button style = {button_blue.blue} title="Bad Http Request" onPress = {() => badRequest()} />
  </View>
);

NewRelic.endInteraction(HttpDemo_id);  

setAttribute(name: string, value: boolean | number | string): void;

Creates a session-level attribute shared by multiple mobile event types. Overwrites its previous value and type each time it is called.

   NewRelic.setAttribute('RNCustomAttrNumber', 37);

setUserId(userId: string): void;

Set a custom user identifier value to associate user sessions with analytics events and attributes.

   NewRelic.setUserId("RN12934");

recordBreadcrumb(name: string, attributes?: {[key: string]: boolean | number | string}): void;

Track app activity/screen that may be helpful for troubleshooting crashes.

   NewRelic.recordBreadcrumb("shoe", {"shoeColor": "blue","shoesize": 9,"shoeLaces": true});

recordCustomEvent(eventType: string, eventName?: string, attributes?: {[key: string]: boolean | number | string}): void;

Creates and records a custom event for use in New Relic Insights.

   NewRelic.recordCustomEvent("mobileClothes", "pants", {"pantsColor": "blue","pantssize": 32,"belt": true});

How to see JSerros(Fatal/Non Fatal) in NewRelic One?

There is no section for JavaScript errors, but you can see JavaScript errors in custom events and also query them in NRQL explorer.

Screen Shot 2022-02-10 at 12 41 11 PM

You can also build dashboard for errors using this query:

SELECT jsAppVersion,name,Message,errorStack,isFatal FROM `JS Errors` SINCE 24 hours ago

Symbolicating a stack trace

Currently there is no symbolication of Javascript errors. Please follow the steps described here for Symbolication.

Symbolication for Javascript errors are coming in future releases.

* IMPORTANT considerations and best practices include:
*
* - You should limit the total number of event types to approximately five.
* eventType is meant to be used for high-level categories.
* For example, you might create an event type Gestures.
*
* - Do not use eventType to name your custom events.
* Create an attribute to name an event or use the optional name parameter.
* You can create many custom events; it is only event types that you should limit.
*
* - Using the optional name parameter has the same effect as adding a name key in the attributes dictionary.
* name is a keyword used for displaying your events in the New Relic UI.

* To create a useful name, you might combine several attributes.

newrelic-react-native-agent-fix's People

Contributors

ahmaddehnavi avatar

Watchers

 avatar

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.