{"action":"created","comment":{"url":"https://api.github.com/repos/qtop/qtop/pulls/comments/58304048","id":58304048,"diff_hunk":"@@ -0,0 +1,283 @@\n+# qtop.py guide\n+\n+  * [Introduction](#introduction)\n+  * [Quickstart](#quickstart)\n+  * [Output walkthrough](#output-walkthrough)\n+  * [Watchmode](#watch-mode)\n+  * [Customisation](#customisation)\n+  * [Command-line arguments]() (TODO)\n+  * [Usage tips]() (TODO)\n+\n+## Introduction\n+\n+### Background\n+\n+qtop.py is based on the same-titled bash script (well, minus the .py!) written by @fgeorgatos long ago. The main reason for rewriting it from scratch in python was the drive to add some much-needed functionality, which was getting harder and harder to do in bash. The new version of qtop.py is much more extendable, so as to be able to cooperate with more Local Resource Management Systems (LRMSs), such as Oracle/Sun Grid Engine (SGE/GE), LSF, LoadLeveler, OAR, SLURM etc. It's also less buggy, with most of the bugs of the old version eradicated.\n+\n+### Goals\n+\n+qtop.py is a tool written to summarize, textually and visually, the state of an LRMS, along with some relevant information around clusters, Grid-specific or independent. It gathers information from the LRMS and organises them in a compact yet illustrative format, for easy access. \n+Expandability and configurability were deemed very important and were taken into account from the very early stages of designing qtop.py. \n+What's more, it is intended that the information that qtop.py gathers is reused by other developers or system administrators, either for other purposes or in different visualisation formats/media. For this reason, qtop.py exports the gathered information to a convenient json format.\n+Also, we have gone to great lengths to keep qtop.py dependency-free. That means, you don't have to download or install anything extra; qtop.py works out of the box!\n+\n+## Quickstart\n+\n+The absolute simplest way to get qtop.py to display _anything_ is by invoking it in demo mode:\n+```\n+./qtop.py -b demo\n+```\n+The `-b` switch must always be followed by one of the supported batch systems (as of version 0.8.9, pbs, sge, oar, demo).\n+\n+That should create and destroy fictional jobs in fictional machines from fictional users, \n+and display all that in a colorful, yet much unhelpful way. You see, the data produced is going to be probably more than a screenful, and so most of it is going to scroll up and away. If you want to start making any sense of it, you're better off trying this:\n+```\n+./qtop.py -b demo -w\n+```\n+which keeps updating the screen with freshly made-up data, and also keeps you at the beginning of it. This is called the [watch mode](#watch-mode). You'll notice that this time it's the end that you cannot see, so now would be a good time to introduce [keybindings](#keyboard-shortcuts) to move around.\n+\n+Most of what you can see on screen is customisable **on-the-fly** by editing a [configuration file](#customisation). Some modifications can also be accomplished by using the aforementioned [keybindings](#keyboard-shortcuts).\n+\n+\n+\n+\n+## Output walkthrough\n+\n+### The three qtop sections\n+\n+The information that qtop.py conveys when ran can be divided into three sections:\n+\n+##### Accounting Summary\n+\n+  * number of nodes (available/total)\n+  * number of cores (available/total)\n+  * number of jobs (running/queued)\n+  * queue names, along with running/queued jobs info for every queue\n+  \n+  ![Accounting Summary](images/accounting_summary.png \"Accounting Summary\")\n+\n+If a queue is denoted as blocked in the LRMS, it will be marked with an asterisk.\n+\n+##### Worker Nodes Occupancy\n+\n+The heart of qtop lies in this sector, which is essentially a matrix (potentially wrapped at the end of the terminal, resulting in a series of matrices), modular in nature.\n+There are two ways to visualise the matrix, one where the columns are worker nodes and the rows are the node characteristics, and another where the matrix is transposed, i.e. the __rows__ are the worker nodes and the columns are their characteristics.\n+We'll be referring to the first form in our examples, which was also the original form used in old qtop.\n+\n+The default characteristics are the node state, the names of the queues involved and the job per core allocation table.\n+\n+This, however, is customisable: as long as there are characteristics of interest existing in the LRMS input file, the User should be able to describe the characteristic inside the config file and have a new vector spawn inside the matrix.\n+\n+One dimension is used to array the worker nodes and another to expand the worker node characteristics (individual cores, node state, associated queues etc).\n+![worker nodes occupancy](images/wn_occupancy.png \"Worker Nodes occupancy\")\n+\n+The default elements displayed are:\n+\n+###### Worker node ID (virtual or real node name)\n+  ![worker nodes ID](images/wnid.png \"Worker Nodes ID\")\n+  \n+  The options here are either the real full name of the worker nodes, or a numbering scheme. If the worker node numbering is atypical, e.g. from `pc23` there's a jump to `pc-b-145`, the standard representation scheme will represent such gaps with non-existent worker nodes, which might not always be desirable. Hence, a remapping mechanism will be put in place, giving consistent numbering starting from zero, to all nodes belonging to the cluster.\n+\n+###### Node state\n+  ![Node state](images/node_state.png \"Node state\")\n+  \n+  The node state is denoted with the first letter of the following: \n+    * **j**ob-exclusive\n+    * **b**usy\n+    * **o**ffline\n+    * **d**own\n+  \n+  The symbol \"**-**\" is used when the node is free.\n+\n+###### Queue names\n+  ![Queue name](images/queue_name.png \"Queue name\")\n+  \n+  The queue names sector shows the initials of the queue names loaded with jobs running on the specific worker node. The full names of the queues show up earlier in the Accounting Summary, color-coded in the same way. So if you have queues all starting with the same letter, e.g. grid3000M, grid2000M, grid5000M, the colouring will help you see which is\n+\n+###### Job allocation table\n+  ![Cores](images/cores.png \"Cores\")\n+  \n+  The jobs are displayed via their owner, who is given a single-character ID. The mapping is shown on the [User account information](#user-account-information) section.\n+  An underscore '_' denotes a free core.\n+  A hash symbol '#' means that the core in this position does not exist on this worker node. If, for example, a hundred-node cluster consists of 96 worker nodes of 32 cores and 4 worker nodes of 16 cores, the last 16 core position in those 4 worker nodes will be substituted with the hash symbol.\n+\n+##### User account information\n+\n+  * `id` is a symbol denoting a unique unix account\n+  * the jobs of every user, with distinct mention for the running jobs vs. the total number of jobs (including the finished ones)\n+  * the name of the unix account\n+  * Grid certificate DN, or GECOS field\n+\n+  The former is useful in Grid-connected clusters.\n+  It shows the owner of the pool account at the current time.\n+  \n+  _Note_: This can only be shown for root accounts, because of the dependence on `edg-mkgridpool --list`\n+\n+  The GECOS field either retrieves information from a cached file (described in the config file) or gets information in realtime from `getent passwd`\n+\n+## Watch mode\n+\n+The watch mode is a step-up from the original implementation, where the user was able to run qtop with `watch -d` prepended, so as to be able to watch an almost real-time evolution of the system monitored.\n+Alas, there was no way to retain qtop's coloring information with watch (not in older versions of watch, anyway).\n+An in-house implementation of watch was hence inspired, and along with that came new features that original watch doesn't provide, giving interactivity to the user, in an ncurses-like fashion.\n+\n+The options available in watch mode, as of version 0.8.9 are:\n+\n+  * navigation through a big matrix, as if more/less were used (more or less ;) with vim-like commands\n+  * matrix transposition (switch between rows<->columns)\n+  * node ID type switch (from proper full node name to bare numbering)\n+  * coloring code switch (user id coloring/queue coloring)\n+  * real-time filtering of nodes according to name substring or RegEx/node state/node number\n+\n+### Keyboard shortcuts\n+\n+##### Navigation\n+\n+| shortcut| function                       |\n+|--------:|:-------------------------------|\n+|     j/k | go to down/up one screen       |\n+|     h/l | go to left/right one screen    |\n+|     g/G | go to top/bottom of matrix     |\n+|     0   | go to left end of matrix       |\n+|     $   | go to right end of matrix      |\n+|     r   | reset position/refresh         | \n+\n+##### Other\n+\n+| shortcut| function                       |\n+|--------:|:-------------------------------|\n+|     f   | apply filtering                |\n+|     F   | switch node ID type            |\n+|     m   | switch coloring code           |\n+|     s   | apply sorting                  |\n+|     t   | transpose matrix               |\n+|     q   | quit qtop                      |\n+\n+## Customisation \n+\n+Customisation is achieved by means of editing a configuration file. Modifying most of the keys available in the configuration file can affect the behaviour of qtop in a live manner, if running in [watch mode](#watch-mode).\n+\n+### The configuration file (qtopconf.yaml)\n+\n+#### YAML Format (?)\n+\n+YAML was chosen as it is human-readable and should thus be easier for people to read and modify to their liking.\n+That said, the configuration file is in a YAML-**like** format. It does not faithfully follow the format 100%, as it was written quickly and haphazardly. It was decided against using the standard PyYAML module for two reasons: \n+\n+  1. support for python 2.5 was recently dropped, while we, on the other hand, aim to keep supporting it\n+  2. we would very much like qtop to have zero dependencies, so that users can just download and run it on their potentially \"sui generis\" systems, without the need to download **any** extra packages.\n+\n+This has, unfortunately, resulted in some \"quirks\" in the YAMLish format now used, such as:\n+\n+  * having to leave a blank line after every line of python code included in the configuration file (cases such as this are found in lambda expressions)\n+  * having to end single-item lists in a comma, e.g. `['^wn-26',]`\n+  * two consecutive unindents not being allowed. There must always exist a once-unindented key-value after nested keys\n+  * not being able to write arbitrarily deeply nested dictionary-like structures, without fear it's going to break the universe.\n+\n+Anyone brave enough to dive into `yaml_parser.py`, or better still, rewrite the darn thing, is more than welcome to, by the way. It goes without saying that only a very basic implementation is required (what you can see used in the configuration file, really!) and none of the flashy features that YAML sports.\n+\n+\n+#### Scheduler configuration area\n+\n+```yaml\n+---\n+    savepath: /tmp/qtop_results_$USER\n+    schedulers:\n+      pbs:\n+        pbsnodes_file: %(savepath)s/pbsnodes_a%(pid)s.txt, pbsnodes -a\n+        qstatq_file: %(savepath)s/qstat_q%(pid)s.txt, qstat -q\n+        qstat_file: %(savepath)s/qstat%(pid)s.txt, qstat\n+      oar:\n+        oarnodes_s_file: %(savepath)s/oarnodes_s_Y%(pid)s.txt, oarnodes -s -Y\n+        oarnodes_y_file: %(savepath)s/oarnodes_Y%(pid)s.txt, oarnodes -Y\n+        oarstat_file: %(savepath)s/oarstat%(pid)s.txt, oarstat\n+      sge:\n+        sge_file: %(savepath)s/qstat%(pid)s.F.xml.stdout, qstat -F -xml -u '*'\n+      demo:\n+        demo_file: %(savepath)s/demo%(pid)s.txt, echo 'Demo here'\n+---\n+```\n+\n+There are two ways to run qtop.py, data-wise: \n+  1. run it on a Computing Element (or similar) where qtop.py itself invokes the commands needed to gather the cluster information\n+  2. run it wherever, after the cluster information has been stored locally for qtop to read.\n+\n+In this area of the configuration file, two key elements are set for each scheduler:\n+  * the needed shell commands to run on the Computing Element\n+  * the filepath where the cluster information is to be saved\n+\n+So, let's say your nick is Mike and you are administering an OAR cluster. If you just invoke:\n+```\n+./qtop.py -b oar\n+```\n+then qtop is going to invoke `oarnodes -s -Y`, `oarnodes -Y`, `oarstat` consecutively, and store it, respectively, in \n+```\n+/tmp/qtop_results_mike/oarnodes_s_Y.txt\n+/tmp/qtop_results_mike/oarnodes_Y.txt\n+/tmp/qtop_results_mike/oarstat.txt\n+```\n+\n+If, instead, you invoke it as follows:\n+```\n+./qtop.py -b oar -s <path-to-cluster-information>\n+```\n+qtop will search for `oarnodes_s_Y.txt`, `oarnodes_Y.txt` and `oarstat.txt` in `<path-to-cluster-information>` (retrieved by you, earlier). \n+\n+\n+qtop also has a scheduler-type discovery system, meaning it will try to guess which scheduler system is installed in your system. The keys below let the user decide which command it should be that uniquely characterises the scheduler. If, for example, qtop can successfully find `qacct` on the system where qtop is executed, it will decide SGE is installed.\n+```yaml\n+---\n+    signature_commands:\n+      pbs: pbsnodes\n+      oar: oarnodes\n+      sge: qacct\n+      demo: echo\n+---\n+```\n+\n+#### XML parsing\n+\n+```yaml\n+---\n+    faster_xml_parsing: False\n+---\n+```\n+\n+As the input data coming from SGE systems is in XML format, the natural choice for parsing XML data in python is the **lxml** module. That, however, is not in the standard library, and thus requires an extra download. For users that are unable/unwilling to install extra modules in their systems, the standard library slower alternative is used instead.\n+\n+#### Color mappings\n+\n+```yaml\n+---\n+    user_color_mappings:  # order should be from more generic-->more specific\n+    # - \\w+: Gray_D  # enabling this cancels all saved accounts in colormap.py\n+    # - [\\d]+: Gray_D\n+    # - [A-Za-z]+0\\d{2}: Red_L\n+    # - [A-Za-z]+15\\d: Gray_D\n+    # - \\w*lhc\\w*: Cyan_L\n+    # - \\w+00\\d: Blue\n+    # - \\w*cms\\w*: Red_L\n+     - \\w*cms048: Blue\n+     - \\w*cms193: Gray_L\n+     - \\w*atl\\w+: Red\n+     - snielsen: Blue\n+     - ekalesaki: Cyan_L\n+     - zzhang: Red_L\n+     - mmravlak: Red_L\n+     - dbobbili: Cyan_L\n+     - patls021: Cyan_L\n+\n+    queue_color_mappings:\n+      - alice: Red_L\n+      - dteam\\w+: Cyan_L\n+\n+    nodestate_color_mappings:\n+     - au: BlackOnRed\n+     - d: Red_LOnGrayBG\n+---\n+```\n+\n+This is a list of color mappings, using [regular expressions](https://docs.python.org/2/library/re.html). The standard RegEx python module `re` is used for parsing. Order here matters, so the early expressions get overwritten by the later ones. Colors with backgrounds can also be used, for all the color combinations available, check `color_to_code` dictionary in `colormap.py`.\n+\n+In there, you will also find a ton of ready-made colormaps (`userid_pat_to_color_default` dictionary), with a primary focus on user ids found in CERN clusters. ","path":"docs/documentation.md","position":282,"original_position":282,"commit_id":"356d115fbdee216581d67e257f320bc8dbbfd1a7","original_commit_id":"356d115fbdee216581d67e257f320bc8dbbfd1a7","user":{"login":"fgeorgatos","id":1531968,"avatar_url":"https://avatars.githubusercontent.com/u/1531968?v=3","gravatar_id":"","url":"https://api.github.com/users/fgeorgatos","html_url":"https://github.com/fgeorgatos","followers_url":"https://api.github.com/users/fgeorgatos/followers","following_url":"https://api.github.com/users/fgeorgatos/following{/other_user}","gists_url":"https://api.github.com/users/fgeorgatos/gists{/gist_id}","starred_url":"https://api.github.com/users/fgeorgatos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgeorgatos/subscriptions","organizations_url":"https://api.github.com/users/fgeorgatos/orgs","repos_url":"https://api.github.com/users/fgeorgatos/repos","events_url":"https://api.github.com/users/fgeorgatos/events{/privacy}","received_events_url":"https://api.github.com/users/fgeorgatos/received_events","type":"User","site_admin":false},"body":"Large Hadron Collider related clusters (WLCG grid).","created_at":"2016-04-03T03:45:53Z","updated_at":"2016-04-03T03:45:53Z","html_url":"https://github.com/qtop/qtop/pull/194#discussion_r58304048","pull_request_url":"https://api.github.com/repos/qtop/qtop/pulls/194","_links":{"self":{"href":"https://api.github.com/repos/qtop/qtop/pulls/comments/58304048"},"html":{"href":"https://github.com/qtop/qtop/pull/194#discussion_r58304048"},"pull_request":{"href":"https://api.github.com/repos/qtop/qtop/pulls/194"}}},"pull_request":{"url":"https://api.github.com/repos/qtop/qtop/pulls/194","id":65045395,"html_url":"https://github.com/qtop/qtop/pull/194","diff_url":"https://github.com/qtop/qtop/pull/194.diff","patch_url":"https://github.com/qtop/qtop/pull/194.patch","issue_url":"https://api.github.com/repos/qtop/qtop/issues/194","number":194,"state":"open","locked":false,"title":"initiation of documentation","user":{"login":"sfranky","id":1530259,"avatar_url":"https://avatars.githubusercontent.com/u/1530259?v=3","gravatar_id":"","url":"https://api.github.com/users/sfranky","html_url":"https://github.com/sfranky","followers_url":"https://api.github.com/users/sfranky/followers","following_url":"https://api.github.com/users/sfranky/following{/other_user}","gists_url":"https://api.github.com/users/sfranky/gists{/gist_id}","starred_url":"https://api.github.com/users/sfranky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfranky/subscriptions","organizations_url":"https://api.github.com/users/sfranky/orgs","repos_url":"https://api.github.com/users/sfranky/repos","events_url":"https://api.github.com/users/sfranky/events{/privacy}","received_events_url":"https://api.github.com/users/sfranky/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-04-02T18:09:54Z","updated_at":"2016-04-03T03:45:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"03e06befdd241e4c0ec312c332bd5d1d06ae9924","assignee":{"login":"fgeorgatos","id":1531968,"avatar_url":"https://avatars.githubusercontent.com/u/1531968?v=3","gravatar_id":"","url":"https://api.github.com/users/fgeorgatos","html_url":"https://github.com/fgeorgatos","followers_url":"https://api.github.com/users/fgeorgatos/followers","following_url":"https://api.github.com/users/fgeorgatos/following{/other_user}","gists_url":"https://api.github.com/users/fgeorgatos/gists{/gist_id}","starred_url":"https://api.github.com/users/fgeorgatos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgeorgatos/subscriptions","organizations_url":"https://api.github.com/users/fgeorgatos/orgs","repos_url":"https://api.github.com/users/fgeorgatos/repos","events_url":"https://api.github.com/users/fgeorgatos/events{/privacy}","received_events_url":"https://api.github.com/users/fgeorgatos/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/qtop/qtop/pulls/194/commits","review_comments_url":"https://api.github.com/repos/qtop/qtop/pulls/194/comments","review_comment_url":"https://api.github.com/repos/qtop/qtop/pulls/comments{/number}","comments_url":"https://api.github.com/repos/qtop/qtop/issues/194/comments","statuses_url":"https://api.github.com/repos/qtop/qtop/statuses/356d115fbdee216581d67e257f320bc8dbbfd1a7","head":{"label":"qtop:ch-doc-exp","ref":"ch-doc-exp","sha":"356d115fbdee216581d67e257f320bc8dbbfd1a7","user":{"login":"qtop","id":13996987,"avatar_url":"https://avatars.githubusercontent.com/u/13996987?v=3","gravatar_id":"","url":"https://api.github.com/users/qtop","html_url":"https://github.com/qtop","followers_url":"https://api.github.com/users/qtop/followers","following_url":"https://api.github.com/users/qtop/following{/other_user}","gists_url":"https://api.github.com/users/qtop/gists{/gist_id}","starred_url":"https://api.github.com/users/qtop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qtop/subscriptions","organizations_url":"https://api.github.com/users/qtop/orgs","repos_url":"https://api.github.com/users/qtop/repos","events_url":"https://api.github.com/users/qtop/events{/privacy}","received_events_url":"https://api.github.com/users/qtop/received_events","type":"Organization","site_admin":false},"repo":{"id":3699155,"name":"qtop","full_name":"qtop/qtop","owner":{"login":"qtop","id":13996987,"avatar_url":"https://avatars.githubusercontent.com/u/13996987?v=3","gravatar_id":"","url":"https://api.github.com/users/qtop","html_url":"https://github.com/qtop","followers_url":"https://api.github.com/users/qtop/followers","following_url":"https://api.github.com/users/qtop/following{/other_user}","gists_url":"https://api.github.com/users/qtop/gists{/gist_id}","starred_url":"https://api.github.com/users/qtop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qtop/subscriptions","organizations_url":"https://api.github.com/users/qtop/orgs","repos_url":"https://api.github.com/users/qtop/repos","events_url":"https://api.github.com/users/qtop/events{/privacy}","received_events_url":"https://api.github.com/users/qtop/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/qtop/qtop","description":"qtop (pronounced queue-top) is a tool written in order to summarize the state of Queueing Systems, along with some related information relevant on (HPC/grid) clusters. At present it supports the PBS family (most tested), SGE & OAR (should work fine). Please help to increase that list in the Python version of the tool, qtop.py! old reference :","fork":false,"url":"https://api.github.com/repos/qtop/qtop","forks_url":"https://api.github.com/repos/qtop/qtop/forks","keys_url":"https://api.github.com/repos/qtop/qtop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qtop/qtop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qtop/qtop/teams","hooks_url":"https://api.github.com/repos/qtop/qtop/hooks","issue_events_url":"https://api.github.com/repos/qtop/qtop/issues/events{/number}","events_url":"https://api.github.com/repos/qtop/qtop/events","assignees_url":"https://api.github.com/repos/qtop/qtop/assignees{/user}","branches_url":"https://api.github.com/repos/qtop/qtop/branches{/branch}","tags_url":"https://api.github.com/repos/qtop/qtop/tags","blobs_url":"https://api.github.com/repos/qtop/qtop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qtop/qtop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qtop/qtop/git/refs{/sha}","trees_url":"https://api.github.com/repos/qtop/qtop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qtop/qtop/statuses/{sha}","languages_url":"https://api.github.com/repos/qtop/qtop/languages","stargazers_url":"https://api.github.com/repos/qtop/qtop/stargazers","contributors_url":"https://api.github.com/repos/qtop/qtop/contributors","subscribers_url":"https://api.github.com/repos/qtop/qtop/subscribers","subscription_url":"https://api.github.com/repos/qtop/qtop/subscription","commits_url":"https://api.github.com/repos/qtop/qtop/commits{/sha}","git_commits_url":"https://api.github.com/repos/qtop/qtop/git/commits{/sha}","comments_url":"https://api.github.com/repos/qtop/qtop/comments{/number}","issue_comment_url":"https://api.github.com/repos/qtop/qtop/issues/comments{/number}","contents_url":"https://api.github.com/repos/qtop/qtop/contents/{+path}","compare_url":"https://api.github.com/repos/qtop/qtop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qtop/qtop/merges","archive_url":"https://api.github.com/repos/qtop/qtop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qtop/qtop/downloads","issues_url":"https://api.github.com/repos/qtop/qtop/issues{/number}","pulls_url":"https://api.github.com/repos/qtop/qtop/pulls{/number}","milestones_url":"https://api.github.com/repos/qtop/qtop/milestones{/number}","notifications_url":"https://api.github.com/repos/qtop/qtop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qtop/qtop/labels{/name}","releases_url":"https://api.github.com/repos/qtop/qtop/releases{/id}","deployments_url":"https://api.github.com/repos/qtop/qtop/deployments","created_at":"2012-03-12T19:47:24Z","updated_at":"2016-02-26T14:47:59Z","pushed_at":"2016-04-03T03:25:27Z","git_url":"git://github.com/qtop/qtop.git","ssh_url":"git@github.com:qtop/qtop.git","clone_url":"https://github.com/qtop/qtop.git","svn_url":"https://github.com/qtop/qtop","homepage":"http:/cern.ch/fotis/QTOP","size":2507,"stargazers_count":10,"watchers_count":10,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":27,"forks":5,"open_issues":27,"watchers":10,"default_branch":"master"}},"base":{"label":"qtop:develop","ref":"develop","sha":"19683e03efe36f5316990d9d7a3ad7b7526241bd","user":{"login":"qtop","id":13996987,"avatar_url":"https://avatars.githubusercontent.com/u/13996987?v=3","gravatar_id":"","url":"https://api.github.com/users/qtop","html_url":"https://github.com/qtop","followers_url":"https://api.github.com/users/qtop/followers","following_url":"https://api.github.com/users/qtop/following{/other_user}","gists_url":"https://api.github.com/users/qtop/gists{/gist_id}","starred_url":"https://api.github.com/users/qtop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qtop/subscriptions","organizations_url":"https://api.github.com/users/qtop/orgs","repos_url":"https://api.github.com/users/qtop/repos","events_url":"https://api.github.com/users/qtop/events{/privacy}","received_events_url":"https://api.github.com/users/qtop/received_events","type":"Organization","site_admin":false},"repo":{"id":3699155,"name":"qtop","full_name":"qtop/qtop","owner":{"login":"qtop","id":13996987,"avatar_url":"https://avatars.githubusercontent.com/u/13996987?v=3","gravatar_id":"","url":"https://api.github.com/users/qtop","html_url":"https://github.com/qtop","followers_url":"https://api.github.com/users/qtop/followers","following_url":"https://api.github.com/users/qtop/following{/other_user}","gists_url":"https://api.github.com/users/qtop/gists{/gist_id}","starred_url":"https://api.github.com/users/qtop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qtop/subscriptions","organizations_url":"https://api.github.com/users/qtop/orgs","repos_url":"https://api.github.com/users/qtop/repos","events_url":"https://api.github.com/users/qtop/events{/privacy}","received_events_url":"https://api.github.com/users/qtop/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/qtop/qtop","description":"qtop (pronounced queue-top) is a tool written in order to summarize the state of Queueing Systems, along with some related information relevant on (HPC/grid) clusters. At present it supports the PBS family (most tested), SGE & OAR (should work fine). Please help to increase that list in the Python version of the tool, qtop.py! old reference :","fork":false,"url":"https://api.github.com/repos/qtop/qtop","forks_url":"https://api.github.com/repos/qtop/qtop/forks","keys_url":"https://api.github.com/repos/qtop/qtop/keys{/key_id}","collaborators_url":"https://api.github.com/repos/qtop/qtop/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/qtop/qtop/teams","hooks_url":"https://api.github.com/repos/qtop/qtop/hooks","issue_events_url":"https://api.github.com/repos/qtop/qtop/issues/events{/number}","events_url":"https://api.github.com/repos/qtop/qtop/events","assignees_url":"https://api.github.com/repos/qtop/qtop/assignees{/user}","branches_url":"https://api.github.com/repos/qtop/qtop/branches{/branch}","tags_url":"https://api.github.com/repos/qtop/qtop/tags","blobs_url":"https://api.github.com/repos/qtop/qtop/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/qtop/qtop/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/qtop/qtop/git/refs{/sha}","trees_url":"https://api.github.com/repos/qtop/qtop/git/trees{/sha}","statuses_url":"https://api.github.com/repos/qtop/qtop/statuses/{sha}","languages_url":"https://api.github.com/repos/qtop/qtop/languages","stargazers_url":"https://api.github.com/repos/qtop/qtop/stargazers","contributors_url":"https://api.github.com/repos/qtop/qtop/contributors","subscribers_url":"https://api.github.com/repos/qtop/qtop/subscribers","subscription_url":"https://api.github.com/repos/qtop/qtop/subscription","commits_url":"https://api.github.com/repos/qtop/qtop/commits{/sha}","git_commits_url":"https://api.github.com/repos/qtop/qtop/git/commits{/sha}","comments_url":"https://api.github.com/repos/qtop/qtop/comments{/number}","issue_comment_url":"https://api.github.com/repos/qtop/qtop/issues/comments{/number}","contents_url":"https://api.github.com/repos/qtop/qtop/contents/{+path}","compare_url":"https://api.github.com/repos/qtop/qtop/compare/{base}...{head}","merges_url":"https://api.github.com/repos/qtop/qtop/merges","archive_url":"https://api.github.com/repos/qtop/qtop/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/qtop/qtop/downloads","issues_url":"https://api.github.com/repos/qtop/qtop/issues{/number}","pulls_url":"https://api.github.com/repos/qtop/qtop/pulls{/number}","milestones_url":"https://api.github.com/repos/qtop/qtop/milestones{/number}","notifications_url":"https://api.github.com/repos/qtop/qtop/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/qtop/qtop/labels{/name}","releases_url":"https://api.github.com/repos/qtop/qtop/releases{/id}","deployments_url":"https://api.github.com/repos/qtop/qtop/deployments","created_at":"2012-03-12T19:47:24Z","updated_at":"2016-02-26T14:47:59Z","pushed_at":"2016-04-03T03:25:27Z","git_url":"git://github.com/qtop/qtop.git","ssh_url":"git@github.com:qtop/qtop.git","clone_url":"https://github.com/qtop/qtop.git","svn_url":"https://github.com/qtop/qtop","homepage":"http:/cern.ch/fotis/QTOP","size":2507,"stargazers_count":10,"watchers_count":10,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":27,"forks":5,"open_issues":27,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/qtop/qtop/pulls/194"},"html":{"href":"https://github.com/qtop/qtop/pull/194"},"issue":{"href":"https://api.github.com/repos/qtop/qtop/issues/194"},"comments":{"href":"https://api.github.com/repos/qtop/qtop/issues/194/comments"},"review_comments":{"href":"https://api.github.com/repos/qtop/qtop/pulls/194/comments"},"review_comment":{"href":"https://api.github.com/repos/qtop/qtop/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/qtop/qtop/pulls/194/commits"},"statuses":{"href":"https://api.github.com/repos/qtop/qtop/statuses/356d115fbdee216581d67e257f320bc8dbbfd1a7"}}}}