Skip to content

Instantly share code, notes, and snippets.

@JoseCage
Last active April 16, 2019 15:29
Show Gist options
  • Save JoseCage/f94d579f146b1cf6941776034f0371c4 to your computer and use it in GitHub Desktop.
Save JoseCage/f94d579f146b1cf6941776034f0371c4 to your computer and use it in GitHub Desktop.
import ballerina/http;
import ballerina/log;
import ballerina/io;
import ballerina/mysql;
// The expected fields we will get from DataLogger
// And i need to access from payload/request
// IMEI
// SIMN,
// DID;
// TIME
// auth
// group
// PID
// CHAN
// PTYPE
// T0
// TS0
// T1
// T2
// TS2
// T3
// TS3
// SIGNAL
// Listen from Port 3000
listener http:Listener endpoint = new (3000);
# Description
@http:ServiceConfig {
basePath: "/api"
}
service Logger on endpoint {
@http:ResourceConfig{
path: "/logger",
methods: ["POST"]
}
resource function GetTextPayload(http:Caller caller, http:Request req) {
http:Response response = new;
var payload = req.getPayloadAsString();
io:println("payload extratecd: " + <string>payload);
response.statusCode = 200;
response.setContentType("text/plain; charset=utf-8");
response.setPayload(untaint <string>payload);
var result = caller->respond(response);
if (result is error) {
log:printError("error sending response", err = result);
}
}
}
import ballerina/http;
import ballerina/log;
import ballerina/io;
// Data is formatted as: key1=value1;key2=value2
type Logger record {
string IMEI = "";
string SIMN ="";
string DID ="";
string TIME ="";
// string auth ="";
// string agroup ="";
// string PID ="";
// string CHAN ="";
// string PTYPE ="";
string T0 ="";
string TS0 ="";
string T1 ="";
string T2 ="";
string TS2 ="";
string T3 ="";
string TS3 ="";
// string SIGNAL ="";
};
listener http:Listener endpoint = new (3000);
@http:ServiceConfig{
basePath: "/api"
}
service Datalogger on endpoint{
@http:ResourceConfig{
path: "/logger",
methods: ["POST"]
}
resource function GetTesxtPayload(http:Caller caller, http:Request req){
var payload = req.getTextPayload();
if (payload is string) {
Logger|error logg = toRecord(payload);
if (logg is Logger) {
// Now the fields can be accessed as logg.field
string IMEI = logg.IMEI;
string SIMN = logg.SIMN;
string DID = logg.DID;
string TIME = logg.TIME;
//string auth = logg.auth;
string T0 = logg.T0;
string TS0 = logg.TS0;
string T1 = logg.T1;
string T2 = logg.T2;
string TS2 = logg.TS2;
string T3 = logg.T3;
string TS3 = logg.TS3;
//string SIGNAL = logg.SIGNAL;
http:Response response = new;
response.setContentType("application/json; charset=utf-8");
response.setJsonPayload("IMEI " + untaint logg.IMEI);
io:println("IMEI: " + untaint logg.IMEI, " SIMN: " + untaint logg.DID, " T0: " + untaint logg.T0, " T1: " + untaint logg.T1, " T2: " + untaint logg.T2, " TS2: " + untaint logg.TS2, " T3: " + untaint logg.T3, " TS3 " + untaint logg.TS3);
var result = caller->respond("Payload received " + untaint logg.IMEI);
return;
} else {
var result = caller->respond(get400Response(logg.reason()));
return;
}
} else {
var result = caller->respond(get400Response(payload.reason()));
return;
}
}
}
function toRecord(string data) returns Logger|error {
Logger logg = {};
string[] fields = data.split("&");
foreach var field in fields {
string[] keyVal = field.split("=");
match keyVal[0] {
"IMEI" => logg.IMEI = keyVal[1];
"SIMN" => logg.SIMN = keyVal[1];
"DID" => logg.DID = keyVal[1];
"TIME" => logg.TIME = keyVal[1];
"T0" => logg.T0 = keyVal[1];
"TS0" => logg.TS0 = keyVal[1];
"T1" => logg.T1 = keyVal[1];
"TS1" => logg.TS1 = keyVal[1];
"T2" => logg.T2 = keyVal[1];
"TS2" => logg.TS2 = keyVal[1];
"T3" => logg.T3 = keyVal[1];
"TS3" => logg.TS3 = keyVal[1];
var invalidField => {
error e = error("Invalid field: " + invalidField);
return e;
}
}
}
return logg;
}
function get400Response(string msg) returns http:Response {
http:Response err400 = new;
err400.statusCode = 400;
err400.setPayload(untaint msg);
return err400;
}
@JoseCage
Copy link
Author

JoseCage commented Apr 16, 2019

import ballerina/http;
import ballerina/log;

// Data is formatted as: key1=value1;key2=value2
type Logger record {
    string IMEI = "";   
    string SIMN ="";
    string DID =""; 
    string TIME ="";
    string T0 ="";
    string TS0 ="";
    string T1 ="";
    string T2 ="";
    string TS2 ="";
    string T3 ="";
    string TS3 ="";
};

listener  http:Listener endpoint = new (3000);

@http:ServiceConfig{
    basePath: "/api"
}

service Datalogger on endpoint{
    
    @http:ResourceConfig{
        path: "/logger",
        methods: ["POST"]
    }
    resource function GetTesxtPayload(http:Caller caller, http:Request req){
        var payload = req.getTextPayload();

        if (payload is string) {
            Logger|error logg = toRecord(payload);
            
            if (logg is Logger) {
                // Now the fields can be accessed as logg.field
                string IMEI = logg.IMEI;   
                string SIMN = logg.SIMN;
                string DID = logg.DID; 
                string TIME = logg.TIME;
                string T0 = logg.T0;
                string TS0 = logg.TS0;
                string T1 = logg.T1;
                string T2 = logg.T2;
                string TS2 = logg.TS2;
                string T3 = logg.T3;
                string TS3 = logg.TS3;
                
            var result = caller->respond("Payload received " + untaint logg.IMEI);
            return;
            } else {
                var result = caller->respond(get400Response(logg.reason()));
                return;
            }
        } else {
            var result = caller->respond(get400Response(payload.reason()));
            return;
        }
        
    }
}

function toRecord(string data) returns Logger|error {
    Logger logg = {};
    string[] fields = data.split("&");

    foreach var field in fields {
        string[] keyVal = field.split("=");

        match keyVal[0] {
            "IMEI" => logg.IMEI = keyVal[1];
            "SIMN" => logg.SIMN = keyVal[1];
            "DID" => logg.DID = keyVal[1];
            "TIME" => logg.TIME = keyVal[1];
            "T0" => logg.T0 = keyVal[1];
            "TS0" => logg.TS0 = keyVal[1];
            "T1" => logg.T1 = keyVal[1];   
            "TS1" => logg.TS1 = keyVal[1];
            "T2" => logg.T2 = keyVal[1];
            "TS2" => logg.TS2 = keyVal[1];
            "T3" => logg.T3 = keyVal[1];
            "TS3" => logg.TS3 = keyVal[1];

            var invalidField => {
                error e = error("Invalid field: " + invalidField);
                return e;
            }
        }
    }
    return logg;
}

function get400Response(string msg) returns http:Response {
    http:Response err400 = new;
    err400.statusCode = 400;
    err400.setPayload(untaint msg);
    return err400;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment