Sage

By Tsachi Shushan, Software Engineer @

A Node.js toolkit for building micro-services

Why?

  • Javascript
  • Native web APIs
  • Lightweight

(Short) History

Several node infrastructures

Sage wins

Alignment to Ob1k conventions

More than 30 prod services

Drill down

Sage Modules

Config\Properties

Logs

Discovery

Metrics

Server

 

 

@sage\config (properties)

  [all]:
    discoveryMode: true
    logger:
      sink: file
      minLevel: INFO
    recaptcha.enabled: false
    trackjs.key: dummay
  [dev]:
    logger:
      sink: stdout
  [test]:
  [simulator]:
  [stg]:
    trackjs.key: 123BjhWp6dHhlLAXk4AiGaKnoq4543
  [prod]:
    recaptcha.enabled: true
    trackjs.key: ENC(lsQBjhWp6dHhlLAXk4AiGaKnoqfydn)
import * as properties from '@sage/config';

...

function isRecaptchaEnabled() {
    return properties.get('recaptcha.enabled');
}

@sage\lumberjack (logs) 

import {LoggerFactory} from '@sage/utils';
const logger = LoggerFactory.getLogger('sesame.recaptcha.service');

...

if (success) {
  logger.info(`token validation success`, parmas);
  return resolve();
} else {
  logger.error(`token validation failed`, err, params);
  return reject();
}

{
    "facility":"sesame.recaptcha.service",
    "level":104,
    "severity":"INFO",
    "message":"token validation success",
    "obmessage":"token validation success",
    "obowner":"appservices",
    "obtags":["Sesame","prod"],
    "obtimestamp":"2018-01-16 18:14:05.849"
}
LOG FILE:

@sage\discovery

import { serviceDiscoveryService } from '@sage/utils';

...

serviceDiscoveryService.fetchTarget('AmplifyTokenGenerator').then((target) => {
    ...
});
    

@sage\metrics

import * as metrics from '@sage/metrics';

...

constructor {
  metrics.createCounter('token_issue', 
                        'Counter for creation of tokens', 
                        ['token_type', 'status']);
}
...

issueToken(params: any) {
  ...    
  metrics.use('token_issue', {token_type: 'AMELIA', status: 'new'}).inc(1);
  ...
}

    

@sage\server

import {server as SageServer, lumberjack} from '@sage/toolkit';
import router from './route/routes';

const logger = lumberjack.LoggerFactory.getLogger('server.main');

class MyService extends SageServer {
  constructor() {
    super({
      routes: router.getRoutes()
    });
  }
}

new MyService().start().then(() => {
  logger.info(`***************  MyService Started ********************`);
});
    

Deployment

Glu

Dyploma

How do I start?

Sage template

Typescript

Frontend Support?

Contribution

and guidelines

OB-GATEWAY

OB-GATEWAY

my.outbrain.com/login

my.outbrain.com/amplify/...

my.outbrain.com/amelia/...

OBGateway

Security

Authentication

Routing

Amelia

AmplifyApp

Sesame

CHIDC2

Made with Slides.com