Document toolboxDocument toolbox

HTTP endpoint

Tokens are employed to authorize the event sources that send data to Devo over HTTP. Generate a token for your HTTP endpoint in the Devo web application, then use that token to set up event sending from your HTTP endpoint.

Create the token needed to authorize the endpoint

The OAuth token is a 32-character alphanumeric string that authorizes a connection to Devo. When this token is used when making HTTP requests to Devo, it is recognized by the platform and the connection is authorized and the request carried out. To create the token:

  1. Go to Administration → Credentials and select the Authentication Tokens tab.
  2. Click Create New Token.

  3. The Create new token window opens. Select Sending data via HTTP.

  4. Enter a Token name that describes the unique event source, then identify the destination Target table(s) for the events. This is the tag or tags that will be used by Devo to classify the events. You can use wildcards to send the data to multiple tables. For example, to send the events to all tables that begin with "my.app", you can specify my.app.**. See the HTTP/APIv2 tokens section to learn more about how to use wildcards when identifying target tables.

    Note that it is not possible to ingest data to tables that receive events in CEF syslog format using this method.

  5. Click Accept. The token is generated and appears in the token list.

Configure the HTTP endpoint

Once the token has been generated, you can configure the endpoint. The URL to send the HTTP request follows this format:

<endpoint>/<mode>/<domain>/token!<token>/<host>/<tag>?<message>

Where each element in the URL is described below:

  • <endpoint> - Use the endpoint that corresponds to the Devo Cloud region you use.

    USAhttp[s]://http-us.devo.io
    Europehttp[s]://http-eu.devo.io
    Spainhttp[s]://http-es.devo.io
  • <mode> - This can be either event (for sending single events) or stream (for sending multiple events). Each mode accepts the HTTP methods as follows:


    eventstream
    GET✓✘
    POST✓✓
    PUT✓✓
  • .<domain> - The Devo domain the events are being sent to.
  •  <token> - The token you generated in Devo to authorize your connection. 
  •  <host> - The hostname of the sending host. If unknown, enter "-".
  •  <tag> - The Devo tag to apply to the events.
  •  <message> - The message to be logged.

Here is an example of an endpoint URL:

http://http-us.devo.io/event/myDomain/token!a5370g9e8f7d7edf9d/local1/my.app.http.js?this%20is%20a%20example%20of%20log

Code samples

Here you can see a few examples of how token-based HTTP requests can be sent from an endpoint to a table (or tables) in a Devo domain. 

Java

package lt.example.http.send;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class Main {
  // /event/<identity>/token!<signature>/<host>/<tag>?<message>

  public static void main(String[] args) {
    try {
      final String url = generateUrl(
        "http://devoEndpoint",
        "demoDomain",
        "example_token_1234abcd",
        "my_src_hostname",
        "my.app.demo.send",
        encodeToHttp("example_of_log"));

      URL obj = new URL(url);
      HttpURLConnection con = (HttpURLConnection) obj.openConnection();
      con.setRequestMethod("GET");
      int responseCode = con.getResponseCode();
      System.out.println("Response Code : " + responseCode);
      System.out.println("Response: " + con.getResponseMessage());
    } catch (UnsupportedEncodingException e) {
      System.err.println("Cannot encode message: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println(e.getMessage());
      e.printStackTrace();
    }
  }

  public static String encodeToHttp(String str)
    throws UnsupportedEncodingException {
    return URLEncoder.encode(str, "UTF-8").replace("+","%20");
  }

  public static String generateUrl(String serverPath, String domain,
                                   String token, String hostname,
                                   String tag, String msg) {

    return new StringBuilder(serverPath)
            .append("/event/")
            .append(domain).append("/token!")
            .append(token).append("/")
            .append(hostname).append("/")
            .append(tag).append("?")
            .append(msg)
            .toString();
  }
}

Java (POST example)

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.DataOutputStream;

public class Main {
    public static void  main(String[] args) {
        try{
            final String url = generateUrl(
                    "http://devoEndpoint",
                    "demoDomain",
                    "example_token_1234abcd",
                    "my_src_hostname",
                    "my.app.demo.send");

            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            con.setRequestProperty("charset", "utf-8");
            con.setDoOutput(true);
            
            String urlParameters;
            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
            
            for (int i = 0; i < 3; i++) {
                urlParameters = "PostExample" + i + "\n"; // \n needed to send multiple events, otherwise the stream will be sent as a single event
                wr.writeBytes(urlParameters);
            }

            wr.flush();
            wr.close();
            int responseCode = con.getResponseCode();
            System.out.println("Response Code : " + responseCode);
            System.out.println("Response: " + con.getResponseMessage());

        } catch (UnsupportedEncodingException e) {
            System.err.println("Cannot encode message: " + e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
    }

    public static String generateUrl(String serverPath, String domain,
                                     String token, String hostname,
                                     String tag) {

        return new StringBuilder(serverPath)
                .append("/stream/")
                .append(domain).append("/token!")
                .append(token).append("/")
                .append(hostname).append("/")
                .append(tag).append("?")
                .toString();
    }
}

HTML - jQuery

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Devo: JQuery Example</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script>
    var serverPath = "http://devoEndpoint";
    var domain = "demoDomain";
    var token = "example_token_1234abcd";
    var hostname = "my_src_hostname";
    var tag = "my.app.demo.send";
    var msg = "this is a example of log";

    function generateUrl(domain, token, hostname, tag, msg) {
      return serverPath + "/event/" + domain + "/token!" + token + "/" +
        hostname + "/" + tag + "?" + msg;
    }

    $(document).ready(function() {
      $.get(generateUrl(domain, token, hostname, tag, msg),
        function(data, status) {
          alert("Data: " + data + "\nStatus: " + status);
        });
    });
  </script>
</head>
<body>
  <h1>JQuery Example</h1>
</body>
</html>

HTML - JavaScript

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Devo: JavaScript Example</title>
  <script>
    var serverPath = "http://devoEndpoint";
    var domain = "demoDomain";
    var token = "example_token_1234abcd";
    var hostname = "my_src_hostname";
    var tag = "my.app.demo.send";
    var msg = "this is a example of log";

    function generateUrl(domain, token, hostname, tag, msg) {
      return serverPath + "/event/" + domain + "/token!" + token + "/" +
        hostname + "/" + tag + "?" + msg;
    }

    var req;

    if (window.XMLHttpRequest) {
      req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      try {
        req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {

        try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
      }
    }

    req.open("GET", generateUrl(domain, token, hostname, tag, msg), true);
    req.send(null);
  </script>
</head>
<body>
  <h1>JS Example</h1>
</body>
</html>

cURL - Sending a single event

curl -v ‘<DEVO_ENDPOINT>/event/<DOMAIN>/token!<TOKEN>/<HOSTNAME>/<TAG>?this%20is%20a%20example%20of%20log’

cURL - Sending a file with events

curl -v --request POST --url '<DEVO_ENDPOINT>/stream/<DOMAIN>/token!<TOKEN>/<HOSTNAME>/<TAG>' --header 'Content-Type:application/x-www-form-urlencoded' --header 'charset:utf-8' --data-binary @<FILE_PATH>

.