Giter Club home page Giter Club logo

fabianorosa1 / mta-job-scheduler Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sap-archive/mta-job-scheduler

0.0 0.0 0.0 226 KB

Multi-Target Application (MTA) sample using the SAP Cloud Platform Job Scheduler service Node.js library to schedule future, repeating (ex: Webhook), and long running jobs.

Home Page: https://help.sap.com/viewer/07b57c2f4b944bcd8470d024723a1631/Cloud/en-US/22c2df4d22cb4a05af4c9502a67597ae.html

HTML 1.98% JavaScript 98.02%

mta-job-scheduler's Introduction

REUSE status

MTA-Job-Scheduler

Multi-Target Application (MTA) sample using the SAP Cloud Platform Job Scheduler service Node.js library to schedule future, repeating (ex: Webhook), and long running jobs.

Description

This repository contains a complete Multi-Target Application (MTA) sample project that is an example of using the SAP Cloud Platform Job Scheduler service to schedule the triggering of URLs for future execution, triggering them on a recurring scheduled basis, or to managing the status and completion of long running jobs. It also contains a specific example of how to trigger a build job by simulating a GitHub Webhook. The job scheduler service leverages the SAP provided Node.js @sap/jobs-client library using callbacks (not promises) for calling the async REST API.

Much of today's web application programming is designed around a pattern of receiving requests over HTTP, processing the request, and returning a result within a single connection context. Often this is done based on user activity or during the application processing. However, it is often desired to submit requests for execution at a future time or on a periodic basis. This is where delegating the request triggering to a job schedluler is useful. The job scheduler will makes the request on your behalf at the desired future time. This sample project focuses primarily on this use case.

Issues also start to arise when the time taken to perform the processing gets increasingly longer. This can be common when a database must process millions of rows of data or a machine learning algorithm must be trained. In these longer running cases, the client(browser, mobile app, etc.) will often time out assuming that the connection has been dropped and will no longer wait for the response. In these cases it is a better design pattern to trigger a job immediately and receive an identifier to that job that can be to on subsequent queries to retrieve (or set) that job's progress.

It is difficult to anticipate exactly how you should handle long running asynchronus jobs. See this article for a detailed discussion of some options using Node.js.

The long running job example is included in a branch of the repository called nodejs-wrk.

Note: Since the nature of using the job scheduler is to trigger jobs that execute in the future or over a long time period, you can't see the evidence of thieir eventual running in a web browser. You must watch the logs of the srv (or wrk) module to see the when they ran and what the results of their running were. When using the SAP Cloud Platform, use the following cf command.

cf logs job-sched-srv

To simplify testing, a simple job URL is implemented within the app at /util/date which returns the current server's date and time.

A more complex job URL that simulates the trigginering a GitHub WebHook is found at /util/trigger.

Documentation

The Node.js library is published in the public NPMjs.com registry as @sap/jobs-client. While currently the Readme page focuses on XS Advanced usage, SAP Cloud Platform Cloud Foundry deployment is also supported.

The Job Scheduler REST APIs as used in SAP Cloud Platform are documented under the API Client Libraries section.

Documentation link for the Job Scheduler Services in XS Advanced on HANA on-premise. See also Scheduling Jobs in XS Advanced.

Requirements

Download and Installation

...
modules:
- name: job-sched-srv
  type: nodejs
  path: srv
...
  properties:
     # Find this with 'cf app job-sched-app' on Cloud Foundry or 'xs app job-sched-app --urls' on XSA
     JOB_SCHED_APP_URL: 'https://<subdomain>-dev-job-sched-app.cfapps.<landscape>.hana.ondemand.com'
     # Find this by clicking "Webhook Data" in the "General Information" section of your job Secret:
     JOB_SCHED_CICD_UI: 'https://<subdomain>.cicd.cfapps.<landscape>.hana.ondemand.com/ui/index.html'
     JOB_SCHED_WEBHOOK_URL: 'https://cicd-service.cfapps.<landscape>.hana.ondemand.com/v1/github_events/account/<your-account-guid>'
     JOB_SCHED_SECRET_TOKEN: '<your-webhook-secret-token>'
     NODE_DEBUG: 'scheduler'
...
  • OR - after deployment, update the environment for the job-sched-srv module.
cf set-env job-sched-srv JOB_SCHED_APP_URL 'https://<subdomain>-dev-job-sched-app.cfapps.<landscape>.hana.ondemand.com'
cf set-env job-sched-srv JOB_SCHED_CICD_UI 'https://subdomain.cicd.cfapps.<landscape>.hana.ondemand.com/ui/index.html'
cf set-env job-sched-srv JOB_SCHED_WEBHOOK_URL 'https://cicd-service.cfapps.<landscape>.hana.ondemand.com/v1/github_events/account/<your-account-guid>'
cf set-env job-sched-srv JOB_SCHED_SECRET_TOKEN '<your-webhook-secret-token>'
cf restage job-sched-srv

Project Structure

File / Folder Purpose
README.md this getting started guide
COMMANDS.md commands for building/deploying
app/ content for UI frontends go here
srv/ your service module code goes here
mta.yaml project structure and relationships
deploy_*.mtaext MTA Extension files for deploying
package.json project metadata and configuration

Instructions

Replace occurances of .hana.demand,com with the landscape region variant for your account.

See the COMMANDS file for comands for building and deploying the project.

If you want to enable multitenant support, follow these steps(or checkout the multitenant branch).

  • Uncomment the - name: job-sched-reg resource section of the mta.yaml file marked by MULTITENANT SUPPORT SECTION
  • Uncomment the requires: - name: job-sched-reg item in the mta.yaml file marked by MULTITENANT SUPPORT SECTION
  • If using a custom domain, uncomment and adjust the oauth2-configuration section in the xsuaa resource config
  • Uncomment the section of the srv/server.js file marked by MULTITENANT SUPPORT SECTION
  • Replace the contents of the app/xs-app.json file with that of app/xs-app_mt.json
  • Undeploy/Build/Redeploy the entire app with -e deploy_cf_shr.mtaext (Shared Mode)
cf undeploy job-sched -f --delete-services
mbt build -p=cf -t=mta_archives --mtar=job-sched-cf.mtar
cf deploy mta_archives/job-sched-cf.mtar -f -e deploy_cf_shr.mtaext

Limitations

  • Not all features and techniques may be demonstrable with Cloud Foundry trial accounts.

Known Issues

This example project contains no known issues.

How to obtain support

Create an issue in this repository if you find a bug or have questions about the content.

For additional support, ask a question in SAP Community.

Reporting Problems and Contributing Enhancements

An SAP Code Sample such as this is open software but is not quite a typical full-blown open source project. If you come across a problem, we’d encourage you to check the project’s issue tracker and to file a new issue if needed. If you are especially passionate about something you’d like to improve, you are welcome to fork the repository and submit improvements or changes as a pull request.

To-Do (upcoming changes)

Tools used throughout the development of this project are evolving and my change over time. This may result in discrepencies in the exact procedures or screen-clips in the accompanying blog posts. All efforts will be made to update the content in order to keep pace with the toolsing, but cannot be guarenteed.

Learn more...

Learn more in the help documentation at Job Scheduler REST APIs

A blog post discussing this code sample can be found on the SAP Community. SAP Cloud Platform Job Scheduler service, I’ll get to that later.

License

Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the LICENSE file.

mta-job-scheduler's People

Contributors

andrewlunde avatar btbernard avatar

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.