Another example you might want to have a look at is here
This shows how an external script can interact with both the API as well as the database. In certain cases, it may be much more efficient to interact/query the database directly as opposed to going through the API, for instance, with data intensive tasks better performed at the database level, or for things which are perhaps not so convenient through the API (unwinding category option combos is one example). This script (in R) partially uses the WebAPI, as well as the database, to perform “validation rule analytics”, outside of the system.
I guess similar libraries to access the database directly with NodeJS are available (https://www.npmjs.com/package/pg) to query the database directly with Node.
So my point is, interacting directly with the API has advantages, as the script can be run from anywhere, but accessing the database directly, may be more efficient, or in certain cases, the only way, but you are then obviously limited to running the script on a machine that actually has access to the DHIS2 database directly (which of course, does not need to be the same machine as is running the application).
On Mon, Nov 30, 2015 at 7:00 AM, James Chang firstname.lastname@example.org wrote:
Looked at the ‘integrity.js’. Quite good to find that I can use NodeJS to make it run via cron job.
Having it in java takes care of handling the JSON data quite easily.
Will have to install related libraries, but that’s a great option. Much better than doing it via Java.
Thanks for the file.
On Sun, Nov 29, 2015 at 4:46 AM, Jason Pickering email@example.com wrote:
There are many different ways to do this, and it may or may not be necessary to access the database at all.
Really any scripting language can be used to automate tasks. Some of the ones which I know are being used are Bash, NodeJS, Python and R. Likely there are others out there. There is no requirement to have a Java executable by any means, but it of course could be done this way, if you were so inclined. Anything which can interact with the WebAPI using HTTP should be fine.
Here is a good example in NodeJS-https://github.com/dhis2/dhis2-utils/blob/master/resources/nodejs/integrity/integrity.js of a task which checks some special Integrity SQL views, and then sends out a notification if any of them fail.
The basic pattern though is to access some enpoint through the API, process what you need in your script, and possibly post something back to the server. The other way, as Pierre points out, would be to call an SQL view with a cron job through the API, but It would seem not to be really what you want to do, if you do not want to use PgAgent, which could do the same thing.
On Sun, Nov 29, 2015 at 8:59 AM, Pierre Dane firstname.lastname@example.org wrote:
so I suggest using cron with curl to call the sqlview
On Sunday, 29 November 2015, James Chang email@example.com wrote:
In DHIS Server, we are trying to create a scheduled task that checks events and update some data in events.
We like to avoid using database scheduler (like pgadmin III PgAgent)
That leaves us (We think) with:
- cron job with shell script using database sql comments (in file)
- cron job with java executable (and Web API calls within Java)
We prefer to do this using Web API.
Does that mean ‘cron job with java executable’ is the only choice we could have for our operation?
Any suggestion on other methods that we could use to set up a ‘Web API data checking/updating’ scheduled task? (If there is, could you also provide us with example?)
Jembi Health Systems
Software Development Manager
tel: +27 (0)21 701 0939
cel: +27 (0)83 680 8274
Mailing list: https://launchpad.net/~dhis2-devs
Post to : firstname.lastname@example.org
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp
Jason P. Pickering
Jason P. Pickering