| 1 | = How to use the Open Grid Scheduler package API = |
| 2 | |
| 3 | In this document we will try to describe the main aspects of the programmatic API that other extensions can use in order to access and use Open Grid Clusters. |
| 4 | |
| 5 | == Enumerating Open Grid Clusters == |
| 6 | |
| 7 | The `OpenGridService` class is typically the starting point for a lot of actions. From this class it is possible to get information about and access all cluster that has been defined in the `opengrid-config.xml` file. The service is a singleton instance. Use the `OpenGridService.getInstance()` method to get the object. Note! It is important that the service is actually running inside BASE. Check the '''Administrate->Services''' page that this is the case. |
| 8 | |
| 9 | To enumerate the available Open Grid Clusters use one of the `OpenGridService.getClusters()` methods. This will return a collection of `OpenGridCluster` instances. Most methods in this class are used for getting configuration information from the `opengrid-config.xml` file. The `OpenGridCluster.getId()` method returns the internal ID of the cluster definition. It is created by combining the username, address and port of the cluster (for example, `griduser@grid.example.com:22`). The ID can the be used with `OpenGridService.getClusterById()` to directly access the same cluster later on. Other useful information can be found in the objects returned by calling `OpenGridCluster.getConnectionInfo()` and `OpenGridCluster.getConfig()`. The `OpenGridCluster.asJSONObject()` contains more or less the same information wrapped up as JSON data. This is useful for transferring information a web interface to allow a user to select a cluster to work with. |
| 10 | |
| 11 | '''Java code in a servlet running on the BASE web server''' |
| 12 | {{{ |
| 13 | DbControl dc = ... // We need an open DbControl from BASE |
| 14 | |
| 15 | // Options specifying which (extra) information that we want to return |
| 16 | // Use JSONOptions.DEFAULT to only return the minimal information |
| 17 | JSONOptions options = new JSONOptions(); |
| 18 | options.enable(JSONOption.CLUSTER_INFO); |
| 19 | options.enable(JSONOption.NODE_INFO); |
| 20 | |
| 21 | OpenGridService service = OpenGridService.getInstance(); |
| 22 | JSONArray jsonHosts = new JSONArray(); |
| 23 | |
| 24 | // Enumerates all clusters that the current user has access to |
| 25 | for (OpenGridCluster host : service.getClusters(dc, Include.ALL)) |
| 26 | { |
| 27 | jsonHosts.add(host.asJSONObject(options)); |
| 28 | } |
| 29 | |
| 30 | return jsonHosts; // This is what we transfer to the web client via AJAX |
| 31 | }}} |
| 32 | |
| 33 | '''!JavaScript code running in the web browser the current user is using''' |
| 34 | {{{ |
| 35 | // In the web client use the JSON data to populate a <select> list |
| 36 | var list = document.getElementById('cluster-list'); |
| 37 | list.length = 0; |
| 38 | |
| 39 | var clusters = response; // Response contains an array with cluster information |
| 40 | for (var i = 0; i < clusters.length; i++) |
| 41 | { |
| 42 | var cluster = clusters[i]; |
| 43 | var option = new Option(cluster.connection.name, cluster.id); |
| 44 | option.cluster = cluster; |
| 45 | list[list.length] = option; |
| 46 | } |
| 47 | }}} |
| 48 | |
| 49 | Note that there is no need to use the `OpenGridCluster.connect()` method yet. |
| 50 | |
| 51 | == Creating a job script == |
| 52 | |
| 53 | == Submitting a job == |
| 54 | |
| 55 | == Getting notified when a job completes == |
| 56 | |
| 57 | == Aborting jobs == |
| 58 | |
| 59 | == Advanced usage == |
| 60 | |