Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • Documentation
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • Documentation
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku Architecture
    • Dynos (app containers)
    • Stacks (operating system images)
    • Networking & DNS
    • Platform Policies
    • Platform Principles
  • Command Line
  • Deployment
    • Deploying with Git
    • Deploying with Docker
    • Deployment Integrations
  • Continuous Delivery
    • Continuous Integration
  • Language Support
    • Node.js
    • Ruby
      • Working with Bundler
      • Rails Support
    • Python
      • Working with Django
      • Background Jobs in Python
    • Java
      • Working with Maven
      • Java Database Operations
      • Working with the Play Framework
      • Working with Spring Boot
      • Java Advanced Topics
    • PHP
    • Go
      • Go Dependency Management
    • Scala
    • Clojure
  • Databases & Data Management
    • Heroku Postgres
      • Postgres Basics
      • Postgres Performance
      • Postgres Data Transfer & Preservation
      • Postgres Availability
      • Postgres Special Topics
    • Heroku Redis
    • Apache Kafka on Heroku
    • Other Data Stores
  • Monitoring & Metrics
    • Logging
  • App Performance
  • Add-ons
    • All Add-ons
  • Collaboration
  • Security
    • App Security
    • Identities & Authentication
    • Compliance
  • Heroku Enterprise
    • Private Spaces
      • Infrastructure Networking
    • Enterprise Accounts
    • Enterprise Teams
    • Heroku Connect (Salesforce sync)
    • Single Sign-on (SSO)
  • Patterns & Best Practices
  • Extending Heroku
    • Platform API
    • App Webhooks
    • Heroku Labs
    • Building Add-ons
      • Add-on Development Tasks
      • Add-on APIs
      • Add-on Guidelines & Requirements
    • Building CLI Plugins
    • Developing Buildpacks
    • Dev Center
  • Accounts & Billing
  • Troubleshooting & Support
  • Add-ons
  • All Add-ons
  • Moesif API Analytics
Moesif API Analytics

This add-on is operated by Moesif Inc.

Powerful API observability to help you understand customer API usage and value

Moesif API Analytics

Last updated November 19, 2020

Table of Contents

  • Provisioning the add-on
  • Local setup
  • Using with Node.JS/Express
  • Using with Rails 3.x
  • Using with Python/Django
  • Using with Python/WSGI
  • Using with Java
  • Using with PHP/Laravel
  • Dashboard
  • Migrating between plans
  • Removing the add-on
  • Moesif Terms of Service
  • Support

Moesif is an add-on API Analytics service for: - Modern Customer and API Analytics - Real-time API Debugging - Intelligent API Monitoring

Support for REST, GraphQL, Ethereum Web3, JSON-RPC, SOAP, & more

Moesif helps you prevent minor issues from becoming major outages through deep API monitoring for anomalous behavior of your production API traffic. Learn more about Moesif features.

  • Understand how your customers use your API and what drives engagement.
  • Root cause API issues quickly with ML powered features like Smart Diff.
  • Get Slack and PagerDuty alerts of anomalous API behavior that pings tests don’t catch

Moesif offers drop-in open-source SDKs for the following languages:

  • C# .NET
  • Go
  • Java
  • Node.js
  • PHP
  • Python Django
  • Python WSGI
  • Ruby

Provisioning the add-on

Moesif can be attached to a Heroku application via the CLI:

A list of all plans can be found here.

$ heroku addons:create moesif
-----> Adding moesif to sharp-mountain-4005... done, v18 (free)

During provisioning, a MOESIF_APPLICATION_ID config var is set in your Heroku app’s configuration. It contains the write-only API token that identifies your application with Moesif. You can confirm the variable exists via the heroku config:get command:

$ heroku config:get MOESIF_APPLICATION_ID
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

You now need to set up your language-specific SDK integration with this MOESIF_APPLICATION_ID.

Local setup

Environment setup

After you provision the add-on, you need to locally replicate your config vars so your development environment can operate against the service.

Use the Heroku Local command-line tool to configure, run, and manage process types specified in your app’s Procfile. Heroku Local reads configuration variables from a .env file. To view all of your app’s config vars, type heroku config. Use the following command for each value that you want to add to your .env file:

$ heroku config:get MOESIF_APPLICATION_ID -s  >> .env

Credentials and other sensitive values should not be committed to source-control. In Git exclude the .env file with: echo .env >> .gitignore.

For more information, see the Heroku Local article.

Using with Node.JS/Express

Install the moesif-express SDK.

$ npm install --save moesif-express

Add moesif-express middleware to your express app:

var express = require('express');
var app = express();

var moesifExpress = require('moesif-express');

// Set the options, the only required field is applicationId.
var options = {

  applicationId: process.env.MOESIF_APPLICATION_ID,

  identifyUser: function (req, res) {
    if (req.user) {
      return req.user.id;
    }
    return undefined;
  },

  getSessionToken: function (req, res) {
    return req.headers['Authorization'];
  }
};

// Load the Moesif middleware
app.use(moesifExpress(options));

If you’re not using the Express framework, you can still use this library. The library does not depend on Express, so you can still call the middleware from a basic HTTP server.

var moesifExpress = require('moesif-express');
const http = require('http');

var options = {
  applicationId: process.env.MOESIF_APPLICATION_ID
};

var server = http.createServer(function (req, res) {
  moesifExpress(options)(req, res, function () {
  });

  req.on('end', function () {

    res.write(JSON.stringify({
      message: "hello world!",
      id: 2
    }));
    res.end();
  });
});

server.listen(8080);

For a full list of available options, see this page.

Using with Rails 3.x

Install moesif_rack middleware:

gem install moesif_rack

If you have a Gemfile in your project, add this line to it:

gem 'moesif_rack', '~> 1.2.0'

Inside your Rails app, configure the Moesif options. See more configuration options here.

moesif_application_id = ENV['MOESIF_APPLICATION_ID']

moesif_options = {
  'application_id' => moesif_application_id
}

Within config/application.rb, add moesif_rack as a midddleware:

class Application < Rails::Application
  # snip

  config.middleware.use "MoesifRack::MoesifMiddleware", moesif_options

  # snip
end

Verify your integration by sending a few API calls through your app, and open Moesif Dashboard to see the data:

$ heroku addons:open moesif

Using with Python/Django

Install the moesifdjango library:

$ pip install moesifdjango

Add Moesif to the Django middleware. The process for this differs depends on whether your version of Django is at least 1.10.

For Django 1.10 and later:

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'moesifdjango.middleware.moesif_middleware'
    ...
]

For Django 1.9 and earlier:

MIDDLEWARE_CLASSES = [
    ...
    'moesifdjango.middleware_pre19.MoesifMiddlewarePre19',
    ...
    # other middlewares
]

For all versions, add MOESIF_MIDDLEWARE settings into your settings.py file:

import os

moesif_id = os.environ.get('MOESIF_APPLICATION_ID')

MOESIF_MIDDLEWARE = {
    'APPLICATION_ID': moesif_id,
    # ...
    # other options see https://github.com/Moesif/moesifdjango/
}

For list of all available options, see this page.

Verify your integration by sending a few API calls through your app, and open the Moesif dashboard to see the data:

$ heroku addons:open moesif

Using with Python/WSGI

If you are using Flask, Bottle, or another framework that is built on top of WSGI, install the moesifwsgi library.

$ pip install moesifwsgi

Flask Example:

import os
from moesifwsgi import MoesifMiddleware

moesif_settings = {
    'APPLICATION_ID': os.environ.get('MOESIF_APPLICATION_ID')
}

app.wsgi_app = MoesifMiddleware(app.wsgi_app, moesif_settings)

Bottle Example:

import os
from moesifwsgi import MoesifMiddleware

app = bottle.Bottle()

moesif_settings = {
    'APPLICATION_ID': os.environ.get('MOESIF_APPLICATION_ID'),
}

bottle.run(app=MoesifMiddleware(app, moesif_settings))

For more options and examples for other frameworks see this page.

Using with Java

Install the moesif-servlet SDK.

For Maven users, add this dependency to your project’s pom.xml file:

<dependency>
    <groupId>com.moesif.servlet</groupId>
    <artifactId>moesif-servlet</artifactId>
    <version>1.2.0</version>
</dependency>

Assuming that you are using Spring Boot, which is the standard Java framework supported by Heroku, add the Moesif Servlet filter to your configuration:

import com.moesif.servlet.MoesifFilter;

import javax.servlet.Filter;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.http.converter.*;

@Configuration
public class MyConfig extends WebMvcConfigurerAdapter {

  @Bean
  public Filter moesifFilter() {
    String moesifApplicationId = System.getenv().get("MOESIF_APPLICATION_ID");
    return new MoesifFilter(moesifApplicatoinId);
  }
}

Optionally, to customize the filter, pass in an object that implements MoesifConfiguration, such as MoesifConfigurationAdapter.

@Configuration
public class MyConfig extends WebMvcConfigurerAdapter {

  MoesifConfiguration config = new MoesifConfigurationAdapter() {
    @Override
    public String getSessionToken(HttpServletRequest request, HttpServletResponse response) {
      return request.getHeader("Authorization");
    }
  };

  @Bean
  public Filter moesifFilter() {
    return new MoesifFilter("your application id", config);
  }
}

For more configuration options and integration options for other frameworks, see this page.

Using with PHP/Laravel

Install the Moesif PHP Laravel SDK

$ composer require moesif/moesif-laravel

Add service provider:

// within config/app.php

'providers' => [
    //
    Moesif\Middleware\MoesifLaravelServiceProvider::class,
];

Add to middleware:

// within App/Http/Kernel.php

protected $middleware = [
    //
    \Moesif\Middleware\MoesifLaravel::class,
];

Alternatively, add the midddleware to a specific route group:

protected $middlewareGroups = [
    //
    'api' => [
        //
        \Moesif\Middleware\MoesifLaravel::class,
    ],
];

Publish the package config file:

$ php artisan vendor:publish --provider="Moesif\Middleware\MoesifLaravelServiceProvider"

Set up config:

// within config/moesif.php

return [
    //
    'applicationId' => getenv('MOESIF_APPLICATION_ID'),
];

For complete list of available options, see this page.

Dashboard

For more information on the features available within the Moesif dashboard, please see the docs at https://www.moesif.com/docs.

The Moesif dashboard allows you to view your data, generate visualizations from our large library of charts, configure alert rules, and run machine-learning-powered jobs that perform root cause analysis.

You can access the dashboard via the CLI:

$ heroku addons:open moesif
Opening moesif for sharp-mountain-4005

or by visiting the Heroku Dashboard and selecting the application in question. Select Moesif from the Add-ons menu.

Migrating between plans

Use the heroku addons:upgrade command to migrate to a new plan.

$ heroku addons:upgrade moesif:newplan
-----> Upgrading moesif:newplan to sharp-mountain-4005... done, v18 ($49/mo)
       Your plan has been updated to: moesif:newplan

Removing the add-on

You can remove Moesif via the CLI:

This cannot be undone!

$ heroku addons:destroy moesif
-----> Removing moesif from sharp-mountain-4005... done, v20 (free)

Moesif Terms of Service

By provisioning a Moesif add-on, you are agreeing to Moesif’s Terms of Service and Privacy Policy, which can be found at https://www.moesif.com/terms and https://www.moesif.com/privacy.

Support

All Moesif support and runtime issues should be submitted via one of the Heroku Support channels. Any non-support-related issues or product feedback is welcome at support@moesif.com.

Keep reading

  • All Add-ons

Feedback

Log in to submit feedback.

Ziggeo MSSQL

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies