Giter Club home page Giter Club logo

newsservice's Introduction

Automated Notification Service in a federated Cloud Setup for de.NBI Cloud

Starting the Automated Notification Service

First configuration

You can either edit the config.py in the config directory or create your own (e.g. config-prodcution.py) and use its path as an argument when starting the service (see below: Using gunicorn or Using docker).
First the default config/config.py is loaded and then some of these values will be overwritten by your own custom config.py, so do not worry about changing the default config.py when using your own config.py.

You can set the APPLICATION_ROOT. The application will access its sites under this prefix, i.e. https://host-site/{APPLICATION_ROOT}.\ The standard configuration is 'news'.

You can set CC_SITES. These are the websites the online status is checked for and displayed on the Frontpage. They follow a structure:

CC_SITES = {'Location': 'https://cloud.location-site.de/',
            'Location 2': 'https://cloud.uni-somewhere.de/'}

You should set SECRET_KEY when deploying to production. Flask recommends the following method:

$ python -c 'import os; print(os.urandom(16))'

The standard configuration is 'dev'.

You should set DEBUG to false when deploying to production.

For more configuration options please visit Flask.

Using built-in Flask (only for development!)

It is recommended to run this service in a virtual environment. You can check out how to set up a virtual environment here.

Once you activated the virtual environment you can install all necassary libarys and frameworks with:

$ pip install -r requirements.txt

Afterwards you maybe need to deactivate and re-activate the virtual environment, for changes to take place.

You need to point out to flask, which application you wanna run:

$ export FLASK_APP=newsservice

The port is set to 5000 on default. In order to change the port of the service you can use:

$ export FLASK_RUN_PORT=****

Finally to run the service use:

$ flask run

The terminal should display something similar to this:

 * Serving Flask app "newsservice"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

The service is now up and running. You can visit the web page at http://localhost:5000/{APPLICATION_ROOT}.\ Note: The APPLICATION_ROOT prefix will not be shown in: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit).

Using Gunicorn

It is recommended to run this service in a virtual environment. You can check out how to set up a virtual environment here.

Once you activated the virtual environment you can install all necassary libarys and frameworks with:

$ pip install -r requirements.txt

Afterwards you maybe need to deactivate and re-activate the virtual environment, for changes to take place.

Finally to run the service use:

$ gunicorn -b host:port "newsservice:create_app('path/to/custom-config.py')"

In development you can use host=0.0.0.0 and port=5000. If you do not want to use a custom-config.py just leave it blank.

The terminal should display something similar to this:

 [1979-01-01 00:00:00 +0200] [20228] [INFO] Starting gunicorn 19.9.0
 [1979-01-01 00:00:00 +0200] [20228] [INFO] Listening at: http://0.0.0.0:5000 (20228)
 [1979-01-01 00:00:00 +0200] [20228] [INFO] Using worker: sync
 [1979-01-01 00:00:00 +0200] [20231] [INFO] Booting worker with pid: 20231

The service is now up and running. You can visit the web page at http://host:port/{APPLICATION_ROOT}.\ Note: The APPLICATION_ROOT prefix will not be shown in: [1979-01-01 00:00:00 +0200] [20228] [INFO] Listening at: http://0.0.0.0:5000 (20228).

Using docker-compose

First you need to install Docker, as instructed here.
Next, if you are operating on a Linux machine you also need to install docker-compose as instructed here.

To run the service with default settings just use:

$ docker-compose up --build

The --build argument can be omitted if you already build the image and made no changes to the code.

To run the service with a custom config.py you have to change the docker-compose.yml like follows:\

version: '3.5'
services:
  news-service:
    build:
       context: .
       dockerfile: Dockerfile
    volumes:
          - /path/to/your/name-of-config.py:/app/config/same-or-other-name-of-config.py
    command: gunicorn -b 0.0.0.0:5000 "newsservice:create_app('/app/config/same-or-other-name-of-config.py')"

Publishing a News at the Automated Notification Service

If you are an Administrator at one of de.NBI Clouds facilities you can publish a News to the Service via an Application like cURL or Postman.

You can publish a News by posting a JSON-Document at the REST-Interface /savenews. The JSON-Document containing the News has the following structure:

{"news" : {
	"title": "Title",
	"author": "Author",
	"text": "Text of the News",
	"tag": "Tag",
	"facility-ids": "FacilityID1,FacilityID2,...",
	"perun-login-token": "PERUN Log In Token"
	}
}

As every field is requested, omitting a field will throw an Error.

Each string has a max length defined by the database, so make sure your inputs match the following requierments:

object max. length
title 200
author 100
time 100
text 1500
tag 50
facility id's 2000

An example cURL call could look like this:

 $ curl -X POST -H "Content-Type: application/json" -d  @/path/to/your/news.json http://localhost:5000/news/savenews 

An example news.json could look like this:

{"news" : {
	"title": "Update Analyze Service",
	"author": "John Doe",
	"text": "The Update v1.4 was deployed.",
	"tag": "Update",
	"facility-ids": "123,124",
	"perun-login-token": "edAf6FK8wIGkBn1u8hE_9zVK4_oOTCeMd8axTpA"
	}
}

After publishing a News it will be displayed at your web page

Requesting news of the Automated Notification Service with filters

In order to get already published News of the Automated Notification Service you can post a JSON-Document containing filters to the REST-Interface /requestnews via an Application like cURL or Postman. The Automated Notification Service will return a JSON-Document containing News according to the filters you posted

The JSON-Document can contain the following filters:

{
    "id": "",
    "tag": "",
    "author": "",
    "title": "",
    "text": "",
    "older": "",
    "newer": "",
    "facilityid":""
}

Fields can be omitted, and the values can be empty strings.

An example cURL call could look like this:

 $ curl -X POST -H "Content-Type: application/json" -d  @/path/to/your/filter.json http://localhost:5000/news/requestnews 

An example filter.json could look like this:

{
    "id": "",
    "tag": "Update",
    "author": "John Doe",
    "older": "2019-07-21 17:00:00"
}

empty filters are going to be ignored during the filtering

Requesting the MOTD of the Automated Notification Service

In order to request the MOTD, that is the last published News to the Automated Notification Service, you simply need to send a GET Request at /latestnews. The Automated Notification Service returns a JSON-Document in the following format:

{"title": "Title of latest news", 
 "text": "Text of latest news", 
 "author": "Author of latest news", 
 "time": "Time of latest news"}

An example cURL call could look like this:

 curl -s 'http://127.0.0.1:5000/news/latestnews' 

Also you can request the latest news in an already formatted-string by sending a GET Request at /latestnews-string..

Implement the Custom Message of the Day at your Ubuntu/Debian Distribution

The Automated Notification Service contains custom de.NBI MOTD shell-scripts. In order to install them you need to copy the scripts into the following directory of your Ubuntu/Debian system:

/etc/update-motd.d

You need Root-Permission to perfom this action. Via chmod make sure that the scripts are executable! In order to display you may need to edit the IP-ADRESS and PORT inside the script 51-denbi-motd in line 6:

curl -s 'http://'IP-ADRESS':'PORT'/latestnews'

In case you want to keep a slim log-in experience it is recommended to remove the scripts 10-help-text and 50-motd-news of the directory.

newsservice's People

Contributors

ekatchko avatar prichter327 avatar vktrrdk avatar

Watchers

James Cloos avatar

newsservice's Issues

news-service link redirect (?)

news-service_1 | flask.debughelpers.FormDataRoutingRedirect: b'A request was sent to this URL (http://news-service:5000/news/) but a redirect was issued automatically by the routing system to "http://news-service:5000/news/". Make sure to directly send your POST-request to this URL since we can't make browsers or HTTP clients redirect with form data reliably or without user interaction.\n\nNote: this exception is only raised in debug mode'

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.