gutter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (329) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +58 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/javascripts/base.js +228 -0
  6. data/app/assets/javascripts/gutter/application.js +18 -0
  7. data/app/assets/javascripts/gutter/bootstrap.js +1726 -0
  8. data/app/assets/javascripts/gutter/dashboard.js +512 -0
  9. data/app/assets/javascripts/gutter/gutter.js +2 -0
  10. data/app/assets/javascripts/gutter/odometer.js +2 -0
  11. data/app/assets/stylesheets/gutter/bootstrap-responsive.min.css +12 -0
  12. data/app/assets/stylesheets/gutter/bootstrap.min.css +3647 -0
  13. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome-ie7.css +1203 -0
  14. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome-ie7.min.css +384 -0
  15. data/app/assets/stylesheets/gutter/font-awesome/css/archive/font-awesome.css +1479 -0
  16. data/app/assets/stylesheets/gutter/font-awesome/css/font-awesome.min.css +403 -0
  17. data/app/assets/stylesheets/gutter/font-awesome/font/FontAwesome.otf +0 -0
  18. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.eot +0 -0
  19. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.svg +399 -0
  20. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.ttf +0 -0
  21. data/app/assets/stylesheets/gutter/font-awesome/font/fontawesome-webfont.woff +0 -0
  22. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.eot +0 -0
  23. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.svg +958 -0
  24. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.ttf +0 -0
  25. data/app/assets/stylesheets/gutter/font/OpenSans-Regular-webfont.woff +0 -0
  26. data/app/assets/stylesheets/gutter/odometer.css +94 -0
  27. data/app/assets/stylesheets/gutter/pages/dashboard.css +357 -0
  28. data/app/assets/stylesheets/gutter/style.css +1335 -0
  29. data/app/controllers/gutter/application_controller.rb +4 -0
  30. data/app/controllers/gutter/gutter_controller.rb +28 -0
  31. data/app/helpers/gutter/application_helper.rb +4 -0
  32. data/app/helpers/gutter/gutter_helper.rb +148 -0
  33. data/app/views/gutter/gutter/index.html.erb +476 -0
  34. data/app/views/layouts/gutter/application.html.erb +29 -0
  35. data/config/routes.rb +4 -0
  36. data/lib/gutter.rb +4 -0
  37. data/lib/gutter/engine.rb +5 -0
  38. data/lib/gutter/version.rb +3 -0
  39. data/lib/tasks/gutter_tasks.rake +4 -0
  40. data/test/dummy/-version}] +0 -0
  41. data/test/dummy/README.rdoc +261 -0
  42. data/test/dummy/Rakefile +7 -0
  43. data/test/dummy/app/assets/javascripts/application.js +15 -0
  44. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/helpers/application_helper.rb +2 -0
  47. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  48. data/test/dummy/config.ru +4 -0
  49. data/test/dummy/config/application.rb +59 -0
  50. data/test/dummy/config/boot.rb +10 -0
  51. data/test/dummy/config/database.yml +25 -0
  52. data/test/dummy/config/environment.rb +5 -0
  53. data/test/dummy/config/environments/development.rb +37 -0
  54. data/test/dummy/config/environments/production.rb +67 -0
  55. data/test/dummy/config/environments/test.rb +37 -0
  56. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  57. data/test/dummy/config/initializers/inflections.rb +15 -0
  58. data/test/dummy/config/initializers/mime_types.rb +5 -0
  59. data/test/dummy/config/initializers/secret_token.rb +7 -0
  60. data/test/dummy/config/initializers/session_store.rb +8 -0
  61. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  62. data/test/dummy/config/locales/en.yml +5 -0
  63. data/test/dummy/config/routes.rb +4 -0
  64. data/test/dummy/db/development.sqlite3 +0 -0
  65. data/test/dummy/log/development.log +68803 -0
  66. data/test/dummy/plain +1 -0
  67. data/test/dummy/public/404.html +26 -0
  68. data/test/dummy/public/422.html +26 -0
  69. data/test/dummy/public/500.html +25 -0
  70. data/test/dummy/public/favicon.ico +0 -0
  71. data/test/dummy/script/rails +6 -0
  72. data/test/dummy/tmp/cache/assets/C0F/230/sprockets%2Fe235290a73e0368353a12d52b4008880 +0 -0
  73. data/test/dummy/tmp/cache/assets/C10/200/sprockets%2F014c132130107a064cf1462b567f7996 +0 -0
  74. data/test/dummy/tmp/cache/assets/C1F/600/sprockets%2Ff6315a5472f4449974300a605b9307b6 +0 -0
  75. data/test/dummy/tmp/cache/assets/C29/C60/sprockets%2F60d27d33199c6c58260750985a00c589 +0 -0
  76. data/test/dummy/tmp/cache/assets/C2F/0D0/sprockets%2F9755059392092185dd2fd9a3472f5722 +0 -0
  77. data/test/dummy/tmp/cache/assets/C37/2D0/sprockets%2F814be07a2034dfd2254d166408000707 +0 -0
  78. data/test/dummy/tmp/cache/assets/C46/130/sprockets%2F876c2751f8181102c232a2849f0b43f1 +0 -0
  79. data/test/dummy/tmp/cache/assets/C4D/710/sprockets%2Fa50630663d18903094ff074c24039ff5 +0 -0
  80. data/test/dummy/tmp/cache/assets/C50/330/sprockets%2Fb50529295251120a96c04ba84676f9b8 +0 -0
  81. data/test/dummy/tmp/cache/assets/C5A/C60/sprockets%2Fd2e3dc7116846175bf63872e05444289 +0 -0
  82. data/test/dummy/tmp/cache/assets/C5D/510/sprockets%2F699511812376f70b70225799b77ecb4a +0 -0
  83. data/test/dummy/tmp/cache/assets/C62/340/sprockets%2F685468f90cd007509b87023fe53548f6 +0 -0
  84. data/test/dummy/tmp/cache/assets/C65/1A0/sprockets%2Fce80371336a1f2115b407060fa36624b +0 -0
  85. data/test/dummy/tmp/cache/assets/C65/870/sprockets%2F88d9680a907f3345596d0e71e69a1625 +0 -0
  86. data/test/dummy/tmp/cache/assets/C72/230/sprockets%2F02127f6a1704f956f0380622a18aa3d9 +0 -0
  87. data/test/dummy/tmp/cache/assets/C72/8A0/sprockets%2F9af3a44690e2503492e1d5a43016085b +0 -0
  88. data/test/dummy/tmp/cache/assets/C7B/160/sprockets%2F20b082505bb2eb8c31f979180385736c +0 -0
  89. data/test/dummy/tmp/cache/assets/C80/580/sprockets%2F884728b425edf02184c5abc660547163 +0 -0
  90. data/test/dummy/tmp/cache/assets/C84/D10/sprockets%2F04b1c499392c09e64e01ce5620966b49 +0 -0
  91. data/test/dummy/tmp/cache/assets/C86/ED0/sprockets%2F448f1cd3609483a3b4c1231e8494c985 +0 -0
  92. data/test/dummy/tmp/cache/assets/C87/200/sprockets%2F93e306c2913ab04984def9297462108d +0 -0
  93. data/test/dummy/tmp/cache/assets/C89/180/sprockets%2F13dd63a30f961887bb06389378833b5b +0 -0
  94. data/test/dummy/tmp/cache/assets/C8B/C30/sprockets%2F22476c169944fa06b7aaa08b88906839 +0 -0
  95. data/test/dummy/tmp/cache/assets/C99/6D0/sprockets%2Fd06185ff5de8f46176799a9b61648160 +0 -0
  96. data/test/dummy/tmp/cache/assets/CA3/960/sprockets%2F410c27fc287714811417e074c32dae5c +0 -0
  97. data/test/dummy/tmp/cache/assets/CA4/740/sprockets%2F44b9704319c995f5d33a13c235af22a0 +0 -0
  98. data/test/dummy/tmp/cache/assets/CA5/8A0/sprockets%2F60dae2c244014fc89264159f3d1052d7 +0 -0
  99. data/test/dummy/tmp/cache/assets/CA6/B10/sprockets%2F7a1f934840fbe5c20475b5177f040b15 +0 -0
  100. data/test/dummy/tmp/cache/assets/CA8/020/sprockets%2F22272da364674547025cfa718a9a32cf +0 -0
  101. data/test/dummy/tmp/cache/assets/CA8/9B0/sprockets%2F308d9364105b79f083d0ba4d06b6436d +0 -0
  102. data/test/dummy/tmp/cache/assets/CAB/9E0/sprockets%2Fa99ca5b056b04732410c439ce865d760 +0 -0
  103. data/test/dummy/tmp/cache/assets/CB0/510/sprockets%2F55c71fa75f40008a4fa3807c8662385c +0 -0
  104. data/test/dummy/tmp/cache/assets/CB1/370/sprockets%2F37594dc21e68305891632b01ffb2eb49 +0 -0
  105. data/test/dummy/tmp/cache/assets/CB3/3C0/sprockets%2F75d6b40181d32bf26f34676cbe814494 +0 -0
  106. data/test/dummy/tmp/cache/assets/CB8/830/sprockets%2Fde2ff94651818674052c63136ab9d54d +0 -0
  107. data/test/dummy/tmp/cache/assets/CBA/C40/sprockets%2F865e6f3c235f4a88006a9649616dbc06 +0 -0
  108. data/test/dummy/tmp/cache/assets/CBB/260/sprockets%2F79da0de746521480455e65683df4be53 +0 -0
  109. data/test/dummy/tmp/cache/assets/CBB/410/sprockets%2F9d2d200a8ede615f6187d94934c62627 +0 -0
  110. data/test/dummy/tmp/cache/assets/CBB/DB0/sprockets%2F384981bb74dece48d02624553e617e83 +0 -0
  111. data/test/dummy/tmp/cache/assets/CBD/A30/sprockets%2F943d0159eee3634ec448b6c098b45079 +0 -0
  112. data/test/dummy/tmp/cache/assets/CBE/F70/sprockets%2F664f0c2e6be06256d516965d5572e8e5 +0 -0
  113. data/test/dummy/tmp/cache/assets/CC0/DD0/sprockets%2F36c97b1ccd2cd9b455887578b8821108 +0 -0
  114. data/test/dummy/tmp/cache/assets/CC2/070/sprockets%2F7925984f3e398b2325c27466caaed772 +0 -0
  115. data/test/dummy/tmp/cache/assets/CC2/390/sprockets%2Fb4b02574362368489699c5fec248ab8d +0 -0
  116. data/test/dummy/tmp/cache/assets/CC3/E00/sprockets%2Fb1580a7235647fc541e89fc418479fe6 +0 -0
  117. data/test/dummy/tmp/cache/assets/CC4/C90/sprockets%2Fd7626eb467d298f1698303704a9feb55 +0 -0
  118. data/test/dummy/tmp/cache/assets/CCA/4D0/sprockets%2Fcd64342c823cf657989ea194759d265e +0 -0
  119. data/test/dummy/tmp/cache/assets/CCE/BE0/sprockets%2Ffea718309b57fa3ff13b288887099669 +0 -0
  120. data/test/dummy/tmp/cache/assets/CCF/1C0/sprockets%2F85e27c4ccfb28f57998026a654644f89 +0 -0
  121. data/test/dummy/tmp/cache/assets/CD2/380/sprockets%2F7182431dc52391d415b27bcf20d94aa8 +0 -0
  122. data/test/dummy/tmp/cache/assets/CD5/9B0/sprockets%2F427511319aada8b2bf069b58906b504e +0 -0
  123. data/test/dummy/tmp/cache/assets/CD6/9B0/sprockets%2F5d453b0c85629d2982c030e084abd24e +0 -0
  124. data/test/dummy/tmp/cache/assets/CDA/CC0/sprockets%2F2d36fe07a11e546f4f2057ec42d01975 +0 -0
  125. data/test/dummy/tmp/cache/assets/CDC/5C0/sprockets%2Fb5a92f7a15c1604d83f97e418242e60a +0 -0
  126. data/test/dummy/tmp/cache/assets/CDE/C90/sprockets%2Fac188cb77c378d6aa11c101b88392765 +0 -0
  127. data/test/dummy/tmp/cache/assets/CDF/AC0/sprockets%2Ff35824c8b6661c6bf9520de114c4e038 +0 -0
  128. data/test/dummy/tmp/cache/assets/CE1/CA0/sprockets%2F44949ccf3c4d522859c1a4a516b2990b +0 -0
  129. data/test/dummy/tmp/cache/assets/CE2/690/sprockets%2F09f229a496db3c1dd79e17d24821180f +0 -0
  130. data/test/dummy/tmp/cache/assets/CE3/8D0/sprockets%2F96a042cd2446c12b6a9f95bd9773a076 +0 -0
  131. data/test/dummy/tmp/cache/assets/CE3/8F0/sprockets%2Fa423a9ce56e4c7f202f6583384a2f375 +0 -0
  132. data/test/dummy/tmp/cache/assets/CE4/470/sprockets%2Fb02a979ae3ecc608b2d25182e7834883 +0 -0
  133. data/test/dummy/tmp/cache/assets/CE5/540/sprockets%2F7b046c9f357854421afd13859ba02f8e +0 -0
  134. data/test/dummy/tmp/cache/assets/CE6/260/sprockets%2F435678e2ae094e5830358a9eb11f7c2e +0 -0
  135. data/test/dummy/tmp/cache/assets/CE6/C20/sprockets%2Fad7105d14f2e08c67c2914f868fc2970 +0 -0
  136. data/test/dummy/tmp/cache/assets/CE7/810/sprockets%2Fa51abc8a79a9b2537e248911665d5f19 +0 -0
  137. data/test/dummy/tmp/cache/assets/CE7/EA0/sprockets%2F30722195fc547f326f2e5257a54ceee8 +0 -0
  138. data/test/dummy/tmp/cache/assets/CE8/4A0/sprockets%2F129c884f2be4f1615bec65709935dd05 +0 -0
  139. data/test/dummy/tmp/cache/assets/CE8/660/sprockets%2F011f5b365a97afde492263b2d529b989 +0 -0
  140. data/test/dummy/tmp/cache/assets/CEA/110/sprockets%2F61964b4862f6dc8930f311af66d6a84b +0 -0
  141. data/test/dummy/tmp/cache/assets/CF1/320/sprockets%2F53e57e472039b8de942f7f132b8b098f +0 -0
  142. data/test/dummy/tmp/cache/assets/CF1/490/sprockets%2Fd72384993e511934e71d19cde88da17d +0 -0
  143. data/test/dummy/tmp/cache/assets/CF5/260/sprockets%2F1a8b5ca173638a60a5a34330bce530f5 +0 -0
  144. data/test/dummy/tmp/cache/assets/CF7/B60/sprockets%2Fe39a1b9531c33dd2b2e2f8223320a6e0 +0 -0
  145. data/test/dummy/tmp/cache/assets/CF8/0F0/sprockets%2F1ab9e9914c115a74bec77796596e93b8 +0 -0
  146. data/test/dummy/tmp/cache/assets/CFD/0C0/sprockets%2F69d1826e5df7d7e0901980c49c979ae5 +0 -0
  147. data/test/dummy/tmp/cache/assets/CFE/150/sprockets%2F454f6e9228995d7097ce715ed13feb95 +0 -0
  148. data/test/dummy/tmp/cache/assets/CFE/240/sprockets%2F64f388105986c6b7cb9795ff7d30ee90 +0 -0
  149. data/test/dummy/tmp/cache/assets/CFE/880/sprockets%2F130a631c8dd033d7cdc7167b42fb2095 +0 -0
  150. data/test/dummy/tmp/cache/assets/CFF/2E0/sprockets%2Fa424f4a76604a80cc8f14dca3006b791 +0 -0
  151. data/test/dummy/tmp/cache/assets/D00/000/sprockets%2Fd96f55595f346cb60cb721b30dc220a0 +0 -0
  152. data/test/dummy/tmp/cache/assets/D05/980/sprockets%2Fff0d95b28cd3841c307318a6321c3df2 +0 -0
  153. data/test/dummy/tmp/cache/assets/D06/500/sprockets%2F9c4124aebf4c4555552b43c93a018cf4 +0 -0
  154. data/test/dummy/tmp/cache/assets/D07/610/sprockets%2F581daf5ef5107402dec463707a223af9 +0 -0
  155. data/test/dummy/tmp/cache/assets/D07/E80/sprockets%2F9b0f31e35a2141b594e3eed543dc7174 +0 -0
  156. data/test/dummy/tmp/cache/assets/D08/AA0/sprockets%2Fc5dc62c650a9c855965601ce31e1a06d +0 -0
  157. data/test/dummy/tmp/cache/assets/D09/A70/sprockets%2F0633defe1740a45ef30f85172f2172df +0 -0
  158. data/test/dummy/tmp/cache/assets/D0A/D80/sprockets%2F607b2af13fb941c1196cb093cd6e4881 +0 -0
  159. data/test/dummy/tmp/cache/assets/D0B/DA0/sprockets%2F30d1963f5ace216f47fb170131df81f9 +0 -0
  160. data/test/dummy/tmp/cache/assets/D0C/730/sprockets%2F2e63f21ba951e5e5b84670220f0ff2e9 +0 -0
  161. data/test/dummy/tmp/cache/assets/D0C/BA0/sprockets%2F08e9ee505a554e9d3e0bb3fc96523022 +0 -0
  162. data/test/dummy/tmp/cache/assets/D0C/E20/sprockets%2F7c7c0244b33b6df3c44179be9d22a259 +0 -0
  163. data/test/dummy/tmp/cache/assets/D11/A80/sprockets%2F6fe649a19180291b3187bd0a2d896cbc +0 -0
  164. data/test/dummy/tmp/cache/assets/D12/A10/sprockets%2Fa74f0ead865c1781953d0ff40090d76d +0 -0
  165. data/test/dummy/tmp/cache/assets/D14/EE0/sprockets%2F1881c04e0d2ea6915c4b4fc7b584f649 +0 -0
  166. data/test/dummy/tmp/cache/assets/D15/2C0/sprockets%2F43a086426cee4a2aafe5d991992e2816 +0 -0
  167. data/test/dummy/tmp/cache/assets/D15/9E0/sprockets%2F6eeff9405c4f8216a7e14e174d9f6001 +0 -0
  168. data/test/dummy/tmp/cache/assets/D15/C00/sprockets%2F6a6253c58e31f8e59d0de53255ea62d5 +0 -0
  169. data/test/dummy/tmp/cache/assets/D16/230/sprockets%2Ff48e5dea249ff033738f1f822c3337e0 +0 -0
  170. data/test/dummy/tmp/cache/assets/D1A/A20/sprockets%2F5c4d61c3376080dddedb319799e9d613 +0 -0
  171. data/test/dummy/tmp/cache/assets/D1B/630/sprockets%2F9bf2cfa5d34c327c03796b8946d935c2 +0 -0
  172. data/test/dummy/tmp/cache/assets/D1B/7A0/sprockets%2F3b13121e46c0a04a3c17427bdbbb85b4 +0 -0
  173. data/test/dummy/tmp/cache/assets/D1B/D80/sprockets%2F613c5b5186e4dc6dc5875c9652c24dd7 +0 -0
  174. data/test/dummy/tmp/cache/assets/D1E/E50/sprockets%2Ff4fb783105bdd65392f3567b841f4fd7 +0 -0
  175. data/test/dummy/tmp/cache/assets/D23/2D0/sprockets%2Fe8984f7c23d8a9d23f7bd07e3862e037 +0 -0
  176. data/test/dummy/tmp/cache/assets/D27/0B0/sprockets%2Fda1064a1c1679e19cb7a40f4a304b4d3 +0 -0
  177. data/test/dummy/tmp/cache/assets/D28/830/sprockets%2F97a8d51d3554eb01c02342a24efe0a3c +0 -0
  178. data/test/dummy/tmp/cache/assets/D28/DC0/sprockets%2F8e5a6fcdb5c823616c8996734c7da873 +0 -0
  179. data/test/dummy/tmp/cache/assets/D2A/250/sprockets%2F4c3b6f7de8c6ed856f9c40617588911e +0 -0
  180. data/test/dummy/tmp/cache/assets/D2B/A80/sprockets%2Ff43c20cdb36ce7edca1609300862046b +0 -0
  181. data/test/dummy/tmp/cache/assets/D30/060/sprockets%2F46f5ab9946171d1bb0d4dc1d35510a6e +0 -0
  182. data/test/dummy/tmp/cache/assets/D32/D10/sprockets%2Fb2f54606c3d212e5cea02b9b88490fc0 +0 -0
  183. data/test/dummy/tmp/cache/assets/D34/160/sprockets%2F53ea14edc816eb782774d2a101cad096 +0 -0
  184. data/test/dummy/tmp/cache/assets/D35/B30/sprockets%2F2fdd1b87e220f90505cf6d0f7373e02a +0 -0
  185. data/test/dummy/tmp/cache/assets/D37/6E0/sprockets%2Fb45fed0679012aaf91c4f36a08a4294c +0 -0
  186. data/test/dummy/tmp/cache/assets/D37/B40/sprockets%2Feb3217413f27f423c855cfc25affb460 +0 -0
  187. data/test/dummy/tmp/cache/assets/D38/D90/sprockets%2Fa7974e36f7152e3d0e0227dadfe54b11 +0 -0
  188. data/test/dummy/tmp/cache/assets/D39/7F0/sprockets%2Fb83f84e0ff47c5ea4ba1e8b042649013 +0 -0
  189. data/test/dummy/tmp/cache/assets/D3C/110/sprockets%2F843b92604362095bb0e69c90af2cedce +0 -0
  190. data/test/dummy/tmp/cache/assets/D3D/AE0/sprockets%2Fa446178197fb5aac557517b3a4aa7f6b +0 -0
  191. data/test/dummy/tmp/cache/assets/D3E/910/sprockets%2F922c9dffef01a035565919f0fb5cb702 +0 -0
  192. data/test/dummy/tmp/cache/assets/D3F/B10/sprockets%2Fb297607f301f8ddaa2238cc925f80f6a +0 -0
  193. data/test/dummy/tmp/cache/assets/D40/050/sprockets%2F88e0e3c625bd66fe51d1822d28af2d80 +0 -0
  194. data/test/dummy/tmp/cache/assets/D42/020/sprockets%2Fff66c71248d0f2672f93273ecba353ea +0 -0
  195. data/test/dummy/tmp/cache/assets/D42/B80/sprockets%2Fcfb9f1eec464f256284ebe1f36233317 +0 -0
  196. data/test/dummy/tmp/cache/assets/D43/180/sprockets%2F45bc45aac3d7f422fc46f8d422464e78 +0 -0
  197. data/test/dummy/tmp/cache/assets/D45/E90/sprockets%2Faec58a429ded259be31756b92ff15613 +0 -0
  198. data/test/dummy/tmp/cache/assets/D46/590/sprockets%2F55f507a58768d425dd4a627e40a7aefc +0 -0
  199. data/test/dummy/tmp/cache/assets/D46/B50/sprockets%2F10d770caa62701b52de688e97ee73d8e +0 -0
  200. data/test/dummy/tmp/cache/assets/D47/3B0/sprockets%2F97bb04754ad9d9ece853080b2aa925f7 +0 -0
  201. data/test/dummy/tmp/cache/assets/D48/570/sprockets%2Fa4eea835a9f6ce9660a507db3798027b +0 -0
  202. data/test/dummy/tmp/cache/assets/D48/FC0/sprockets%2F47cf2e58f56acbe7238b29631aac1779 +0 -0
  203. data/test/dummy/tmp/cache/assets/D4C/E70/sprockets%2F17678645a655cdf95b204e86dda4d8ca +0 -0
  204. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  205. data/test/dummy/tmp/cache/assets/D4F/190/sprockets%2Fadcc2e8b83fe4792f917447c86a44c80 +0 -0
  206. data/test/dummy/tmp/cache/assets/D4F/190/sprockets%2Fe68d3a8389e75eacdbd8983c09e19010 +0 -0
  207. data/test/dummy/tmp/cache/assets/D4F/950/sprockets%2Ff8b1e4a369d77442fe6bc39508e3e09e +0 -0
  208. data/test/dummy/tmp/cache/assets/D51/100/sprockets%2F571715ceabc7e33e66f846b456ef75d6 +0 -0
  209. data/test/dummy/tmp/cache/assets/D52/520/sprockets%2F68d5c86f6c9ea8fd1085f18449ae0d51 +0 -0
  210. data/test/dummy/tmp/cache/assets/D54/840/sprockets%2F2aafcd340835ca3bc69ed700b1c45501 +0 -0
  211. data/test/dummy/tmp/cache/assets/D59/400/sprockets%2Ff619d3fd22ddaac2f92a28fb40200720 +0 -0
  212. data/test/dummy/tmp/cache/assets/D5C/940/sprockets%2F6c29bc6eeefc3667299df20792e844e7 +0 -0
  213. data/test/dummy/tmp/cache/assets/D5F/C50/sprockets%2F4ec20042f390ae48d7b5a3cfec5141e4 +0 -0
  214. data/test/dummy/tmp/cache/assets/D62/F50/sprockets%2F66002908f508efb50b9c4cba2a5a6bf3 +0 -0
  215. data/test/dummy/tmp/cache/assets/D63/0D0/sprockets%2F323add23ad8d005af95bdb5095bd7725 +0 -0
  216. data/test/dummy/tmp/cache/assets/D63/A70/sprockets%2Fca01340b98e0b682d267ba1fd15bfe67 +0 -0
  217. data/test/dummy/tmp/cache/assets/D64/2F0/sprockets%2F341b06b57bb1fb630df8c1bef327b793 +0 -0
  218. data/test/dummy/tmp/cache/assets/D65/190/sprockets%2F75aad633ccedab73c51274a3391a8d74 +0 -0
  219. data/test/dummy/tmp/cache/assets/D68/F60/sprockets%2Fb057c6f6087cfc735b5a4c23a128bce5 +0 -0
  220. data/test/dummy/tmp/cache/assets/D6C/3B0/sprockets%2F45d5b58136f21d7df8c0dfb726e2e1c1 +0 -0
  221. data/test/dummy/tmp/cache/assets/D6E/620/sprockets%2F31eddf4853c19ed403d0f147be92df26 +0 -0
  222. data/test/dummy/tmp/cache/assets/D6F/1A0/sprockets%2Fe3d23db8d63093ae39833afcf34e31e6 +0 -0
  223. data/test/dummy/tmp/cache/assets/D6F/380/sprockets%2Fe5be640cc42df8c6a6049a790cf523c6 +0 -0
  224. data/test/dummy/tmp/cache/assets/D70/940/sprockets%2F5e653ff1a51de6c26d6e3abc92b76327 +0 -0
  225. data/test/dummy/tmp/cache/assets/D70/E80/sprockets%2F3a249d9c51393ce16d2640d9bbce3f7d +0 -0
  226. data/test/dummy/tmp/cache/assets/D71/910/sprockets%2F69527a4f2a5d2a2c0fe195f9f62d5b4c +0 -0
  227. data/test/dummy/tmp/cache/assets/D72/760/sprockets%2F9b3e9ea2de2065ac138b6363f7f890ac +0 -0
  228. data/test/dummy/tmp/cache/assets/D72/EF0/sprockets%2Ffc3f19c479f22a4d85c564ea13e51c8a +0 -0
  229. data/test/dummy/tmp/cache/assets/D75/D00/sprockets%2F03a8fbb049950569d4d87dab629dea5b +0 -0
  230. data/test/dummy/tmp/cache/assets/D76/0D0/sprockets%2F676ec207d3fead338ded78c856066a0b +0 -0
  231. data/test/dummy/tmp/cache/assets/D76/8E0/sprockets%2F10a7936c71ad9dff761d2d46d7eeb058 +0 -0
  232. data/test/dummy/tmp/cache/assets/D77/080/sprockets%2F43ff65dd091c2c6cf48cc646034d68cf +0 -0
  233. data/test/dummy/tmp/cache/assets/D77/6F0/sprockets%2Ffe6fcab6288ae589c13237e96b060cf2 +0 -0
  234. data/test/dummy/tmp/cache/assets/D77/900/sprockets%2F77e6b4eb7e3b05edf1650af6681676ad +0 -0
  235. data/test/dummy/tmp/cache/assets/D77/980/sprockets%2Fce065901d3959c67bec634eeb4e8fe10 +0 -0
  236. data/test/dummy/tmp/cache/assets/D78/660/sprockets%2Ffbaccc52e4e5859e6a0e1967f20627e6 +0 -0
  237. data/test/dummy/tmp/cache/assets/D78/770/sprockets%2F5dd67434b177d5b4efe2936efda284e0 +0 -0
  238. data/test/dummy/tmp/cache/assets/D78/A80/sprockets%2F238267f61c90e8b48ee46f4bf8a2c2db +0 -0
  239. data/test/dummy/tmp/cache/assets/D7B/770/sprockets%2Fb0c04ed32d0faa65210c0d52749fab0c +0 -0
  240. data/test/dummy/tmp/cache/assets/D7C/990/sprockets%2F22a69dc590f2f6eda8b7afe666c51890 +0 -0
  241. data/test/dummy/tmp/cache/assets/D7D/A50/sprockets%2F88d515afd730fef79c65550aa66ad68c +0 -0
  242. data/test/dummy/tmp/cache/assets/D7F/6A0/sprockets%2F3d99d4017a9f81fddcf380295a7b68cd +0 -0
  243. data/test/dummy/tmp/cache/assets/D80/D50/sprockets%2Fe86788cdff3e66bab07c115c91f8f624 +0 -0
  244. data/test/dummy/tmp/cache/assets/D81/B80/sprockets%2F6c3ca820fdd948e17a374d395c868fdd +0 -0
  245. data/test/dummy/tmp/cache/assets/D83/920/sprockets%2Fa4353a2776cfb78269d7fbff5e99c23b +0 -0
  246. data/test/dummy/tmp/cache/assets/D85/CA0/sprockets%2F03a58eb49cba3223f94c243aad1ad4a4 +0 -0
  247. data/test/dummy/tmp/cache/assets/D86/D80/sprockets%2F001c46974abf20cf3af4f01c61cf53ac +0 -0
  248. data/test/dummy/tmp/cache/assets/D8A/990/sprockets%2Fed89f0e69fb99fca78140bc4589465ca +0 -0
  249. data/test/dummy/tmp/cache/assets/D8C/610/sprockets%2F319bdc365f809d7e37fa8afd964659df +0 -0
  250. data/test/dummy/tmp/cache/assets/D8E/8B0/sprockets%2F6f0dd508157f0efd0aa6a1d7fca14902 +0 -0
  251. data/test/dummy/tmp/cache/assets/D8F/E30/sprockets%2F06fd1ba6b3ff60b75692a211c38a5afc +0 -0
  252. data/test/dummy/tmp/cache/assets/D8F/FD0/sprockets%2F285135cf1a8e04aacb4578c2dc6c3bc3 +0 -0
  253. data/test/dummy/tmp/cache/assets/D93/D50/sprockets%2Fba7262b8f2e69471fcd0287aae33ad0a +0 -0
  254. data/test/dummy/tmp/cache/assets/D95/1E0/sprockets%2F3a3eb981006b45a2cbe6f5a7bb47d95a +0 -0
  255. data/test/dummy/tmp/cache/assets/D95/5A0/sprockets%2F378dfc7f79f6c9e8f6bc0339d6965bc5 +0 -0
  256. data/test/dummy/tmp/cache/assets/D98/720/sprockets%2F2434ea0068e2695cbda673bacd54ddd7 +0 -0
  257. data/test/dummy/tmp/cache/assets/D9A/C20/sprockets%2F26067ec4dfe2554edc3d8f0fb340c54b +0 -0
  258. data/test/dummy/tmp/cache/assets/D9B/930/sprockets%2Fb681f3ffcd05af4603f0cc61abf29855 +0 -0
  259. data/test/dummy/tmp/cache/assets/D9D/C10/sprockets%2F60a29e756d0233a7de2ae66a7e6e7adc +0 -0
  260. data/test/dummy/tmp/cache/assets/D9F/EC0/sprockets%2F3f2504f96d16dca528633ff3eac07cfd +0 -0
  261. data/test/dummy/tmp/cache/assets/DA0/1D0/sprockets%2F8bfdcf3c0d64c1e1afc1e119c6693559 +0 -0
  262. data/test/dummy/tmp/cache/assets/DA1/810/sprockets%2F05650792d7f6ba6cb751dfad824f6acd +0 -0
  263. data/test/dummy/tmp/cache/assets/DA2/BA0/sprockets%2F9a568ad7ba24d4750ff257aef4ef054b +0 -0
  264. data/test/dummy/tmp/cache/assets/DA6/180/sprockets%2F323ef4f0c03fadb6488f17a46ff7e94b +0 -0
  265. data/test/dummy/tmp/cache/assets/DA7/120/sprockets%2Fbe8125168aeec567a27f3057bd6ebff7 +0 -0
  266. data/test/dummy/tmp/cache/assets/DA7/F70/sprockets%2F27a40d69eee047cb6fdfe6bf96028b61 +0 -0
  267. data/test/dummy/tmp/cache/assets/DAC/110/sprockets%2F6258f6e1e529d7e09e24c07fbbecdd93 +0 -0
  268. data/test/dummy/tmp/cache/assets/DAC/2C0/sprockets%2F3806cf983e7fe8daa4cf83e6a007dd28 +0 -0
  269. data/test/dummy/tmp/cache/assets/DAE/AF0/sprockets%2Fea723747dced4e7c5937af13b48c97eb +0 -0
  270. data/test/dummy/tmp/cache/assets/DB0/710/sprockets%2F3cef41ed9a7c6f52fae191d84783e5d7 +0 -0
  271. data/test/dummy/tmp/cache/assets/DBC/540/sprockets%2F86f6c9053499a920f48c7f5addfee7ed +0 -0
  272. data/test/dummy/tmp/cache/assets/DC0/770/sprockets%2Fa359adf42a317c4a5edce04902bc5dc7 +0 -0
  273. data/test/dummy/tmp/cache/assets/DC2/380/sprockets%2Ff4a7fc0145cc1dabcf19de1649392a2b +0 -0
  274. data/test/dummy/tmp/cache/assets/DC2/C50/sprockets%2F8e4dfd4afa600c1b2087bc8eb272e26b +0 -0
  275. data/test/dummy/tmp/cache/assets/DC3/130/sprockets%2F0672e7e19aa9f9d3020b292eadafb1eb +0 -0
  276. data/test/dummy/tmp/cache/assets/DC3/700/sprockets%2F0d2f8e4ddd72d14f6ad338b3a9b05cc1 +0 -0
  277. data/test/dummy/tmp/cache/assets/DC8/4B0/sprockets%2F44e6f9eaba33fcb43a434d80ef8ac073 +0 -0
  278. data/test/dummy/tmp/cache/assets/DC8/B60/sprockets%2F9bd8be564a3ad9f68a7105b0cda4ef11 +0 -0
  279. data/test/dummy/tmp/cache/assets/DC9/B30/sprockets%2Ffaa921fa9eaed21d4826a9d661b9dd10 +0 -0
  280. data/test/dummy/tmp/cache/assets/DCB/A70/sprockets%2F6fcd98bbdab531575399a42ae1ded2d0 +0 -0
  281. data/test/dummy/tmp/cache/assets/DCD/140/sprockets%2F83c3caad52462c9fcfacf32c3fd27944 +0 -0
  282. data/test/dummy/tmp/cache/assets/DCF/1F0/sprockets%2F42c410adb8a2cfdfb21e01f003dc30aa +0 -0
  283. data/test/dummy/tmp/cache/assets/DCF/250/sprockets%2F2d76775ea0f52a5e3d1c86c2dfba0ff8 +0 -0
  284. data/test/dummy/tmp/cache/assets/DD1/8C0/sprockets%2F84bff024614f1e15fa0d77fd1ff7dd7b +0 -0
  285. data/test/dummy/tmp/cache/assets/DD2/280/sprockets%2Fe1f8c863bf2d18e0a2bd7be69a2b9e36 +0 -0
  286. data/test/dummy/tmp/cache/assets/DD2/710/sprockets%2F8628d8ed90ded6b0e0eb755a78acac24 +0 -0
  287. data/test/dummy/tmp/cache/assets/DD3/630/sprockets%2Ffe6d0ef414fe3382a471e3faf7e4dd63 +0 -0
  288. data/test/dummy/tmp/cache/assets/DD4/0A0/sprockets%2Fe6bb2a5ff873cf3158ed0ac4b3f86f09 +0 -0
  289. data/test/dummy/tmp/cache/assets/DD4/130/sprockets%2Fb0ef8baf598339a286cd0df63ac7b83b +0 -0
  290. data/test/dummy/tmp/cache/assets/DD4/CB0/sprockets%2F2fb64db80b4dc8ee8fcfc16f4270e473 +0 -0
  291. data/test/dummy/tmp/cache/assets/DD6/C30/sprockets%2Fff35f1f235d08836d5c2b7fa55bfef5b +0 -0
  292. data/test/dummy/tmp/cache/assets/DD8/B90/sprockets%2F7ae70acd3b6ebb964d280f97cfb4955c +0 -0
  293. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  294. data/test/dummy/tmp/cache/assets/DDC/E10/sprockets%2F61ce8847c7f5d1d08edfea0d146df5e8 +0 -0
  295. data/test/dummy/tmp/cache/assets/DE0/170/sprockets%2F9a9b79ff56fdcebe5486f0e367c411bb +0 -0
  296. data/test/dummy/tmp/cache/assets/DE2/260/sprockets%2Ff8f896defc5e94cfa30e2f5515db7c08 +0 -0
  297. data/test/dummy/tmp/cache/assets/DE3/300/sprockets%2Fc53d49c8920d7b95a7ed8ff4ea6ea6e4 +0 -0
  298. data/test/dummy/tmp/cache/assets/DE7/630/sprockets%2F5f3ce8dffadfd5990f5e44c68d9425e1 +0 -0
  299. data/test/dummy/tmp/cache/assets/DEC/BA0/sprockets%2Ff6bec7e8e869ef7749d660d45bba7ca7 +0 -0
  300. data/test/dummy/tmp/cache/assets/DED/550/sprockets%2F6b111cf52f042fe47ebd8baa81dab53e +0 -0
  301. data/test/dummy/tmp/cache/assets/DEE/540/sprockets%2F8bad16d64dbacd8bc46b2c145d0ce318 +0 -0
  302. data/test/dummy/tmp/cache/assets/DF2/E40/sprockets%2F102f882bdb07bebda9a4db5b4c2b48d8 +0 -0
  303. data/test/dummy/tmp/cache/assets/DF3/A30/sprockets%2F03dd29ddb09be1c8aee5db733b4d047c +0 -0
  304. data/test/dummy/tmp/cache/assets/DFA/AA0/sprockets%2F0bdf9202bafff6fe48cf8a300a5393ed +0 -0
  305. data/test/dummy/tmp/cache/assets/DFD/420/sprockets%2F5128ab1ee04279ebee5edbfed9182ab6 +0 -0
  306. data/test/dummy/tmp/cache/assets/E00/AB0/sprockets%2F997319d32bcaccfbce780f3ccc8a27f0 +0 -0
  307. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  308. data/test/dummy/tmp/cache/assets/E04/A10/sprockets%2Fe97eabd6255d0ef5f9b0ccb3c292f2d9 +0 -0
  309. data/test/dummy/tmp/cache/assets/E07/6F0/sprockets%2F5b96fbbf00d6ae89b172aecc79a7a95e +0 -0
  310. data/test/dummy/tmp/cache/assets/E13/B00/sprockets%2Fc2f4bc4b6df7022fbe7a0cb00a3afd45 +0 -0
  311. data/test/dummy/tmp/cache/assets/E16/F80/sprockets%2F9ede6a58cd5c1fff42e8c5cf4563d7f6 +0 -0
  312. data/test/dummy/tmp/cache/assets/E1C/060/sprockets%2F2497df812be0edad860cecbb200ba4fd +0 -0
  313. data/test/dummy/tmp/cache/assets/E23/040/sprockets%2Faf3f9526dc1358bb0c06ffabba0feb67 +0 -0
  314. data/test/dummy/tmp/cache/assets/E25/470/sprockets%2F550ad2a5de4f1715af8df2afe15fb1fe +0 -0
  315. data/test/dummy/tmp/cache/assets/E33/430/sprockets%2Fbcdf44f9c1fbd5cf69b77801af27aa5d +0 -0
  316. data/test/dummy/tmp/cache/assets/E54/3F0/sprockets%2Fcb7e21a767fc3d2ac45f8bc4dc1dce4a +0 -0
  317. data/test/dummy/tmp/cache/assets/E5B/510/sprockets%2F1fa4efe0ab3f55fef3f67483b3eac6ba +0 -0
  318. data/test/dummy/tmp/cache/assets/E5E/2B0/sprockets%2F6eb5aba2f6fa8a56fe6da1d77bbea970 +0 -0
  319. data/test/dummy/tmp/cache/assets/E90/F00/sprockets%2Fc1ab3aec41ccae8fa8ee48b1f85d89ec +0 -0
  320. data/test/dummy/tmp/cache/assets/E9A/140/sprockets%2Faf8b05634ecfcdeb876bdf0de4b79ffc +0 -0
  321. data/test/dummy/tmp/cache/assets/E9B/570/sprockets%2F07f6b4f95754ee6e8da8deb7cbacdadd +0 -0
  322. data/test/dummy/tmp/cache/assets/EA4/AD0/sprockets%2Fcbe751f1bc0a3ab64e3eac8e80abaead +0 -0
  323. data/test/dummy/tmp/pids/server.pid +1 -0
  324. data/test/functional/gutter/gutter_controller_test.rb +11 -0
  325. data/test/gutter_test.rb +7 -0
  326. data/test/integration/navigation_test.rb +10 -0
  327. data/test/test_helper.rb +15 -0
  328. data/test/unit/helpers/gutter/gutter_helper_test.rb +6 -0
  329. metadata +688 -0
@@ -0,0 +1,4 @@
1
+ module Gutter
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,28 @@
1
+ require_dependency "gutter/application_controller"
2
+
3
+ module Gutter
4
+ class GutterController < ApplicationController
5
+
6
+ include Gutter::GutterHelper
7
+
8
+ before_filter :whitelisting_options, only: [:fetch_data]
9
+
10
+ GutterOptions = ['ps', 'issue', 'hostname', 'time', 'uptime', 'df', 'whereis', 'users', 'ping', 'online',
11
+ 'netstats', 'last_login', 'swap', 'ram', 'load_average', 'numberofcores', 'ip', 'bandwidth']
12
+
13
+ def index
14
+ end
15
+
16
+ def fetch_data
17
+ unless params['target'].nil?
18
+ render json: send(params['target'])
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def whitelisting_options
25
+ render :json => {'InvalidOptions' => 404} and return unless params['target'].in?(GutterOptions)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ module Gutter
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,148 @@
1
+ module JsonMachinist
2
+ def jsonist(string)
3
+ arr = []
4
+ string.lines.each do |line|
5
+ arr << line.chomp.split('|')
6
+ end
7
+ arr.compact.reject { |arr| arr.all?(&:blank?) }
8
+ end
9
+ end
10
+
11
+ module MemoryUsage
12
+ def ram
13
+ [
14
+ `/usr/bin/free | awk '{ print $2 }'`.lines[1].chomp,
15
+ `/usr/bin/free | awk '{ print $3 }'`.lines[1].chomp,
16
+ `/usr/bin/free | awk '{ print $4 }'`.lines[1].chomp
17
+ ].to_json
18
+ end
19
+ end
20
+
21
+ module Utilities
22
+
23
+ def packages_content
24
+ html = "Software|Installation\n"
25
+ %w(ruby php node mysql python apache2 nginx openssl git make).each do |pkg|
26
+ html += `whereis #{pkg} | awk -F: '{print $1"|"$2$3$4$5"."}'`
27
+ end
28
+ html
29
+ end
30
+
31
+ def whereis
32
+ jsonist(packages_content)
33
+ end
34
+
35
+ end
36
+
37
+
38
+ module GeneralInformation
39
+
40
+ def issue
41
+ [`lsb_release -ds ` + `/bin/uname -r`].to_json
42
+ end
43
+
44
+ def uptime
45
+ [`uptime`].to_json
46
+ end
47
+
48
+ def hostname
49
+ [`/bin/hostname`].to_json
50
+ end
51
+
52
+ def time
53
+ [`/bin/date`].to_json
54
+ end
55
+
56
+ def numberofcores
57
+ [`LC_ALL=C /bin/grep -c ^processor /proc/cpuinfo`.chomp].to_json
58
+ end
59
+
60
+ def ps
61
+ jsonist(`/bin/ps aux | awk '{print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" $6 "|" $7 "|" $8 "|" $9 "|" $10 "|" $11 }'`)
62
+ end
63
+
64
+ def df
65
+ jsonist(`/bin/df | awk '{print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" $6 " "$7}'`)
66
+ end
67
+
68
+ def load_average
69
+ load_arr = `/bin/cat /proc/loadavg | /usr/bin/awk '{print $1 "|" $2 "|" $3}'`.split('|')
70
+ cores = `LC_ALL=C /bin/grep -c ^processor /proc/cpuinfo`.chomp.to_i
71
+ [
72
+ [load_arr[0], ((load_arr[0].to_f * 100)/cores).to_i],
73
+ [load_arr[1], ((load_arr[1].to_f * 100)/cores).to_i],
74
+ [load_arr[2], ((load_arr[2].to_f * 100)/cores).to_i]
75
+ ]
76
+ end
77
+
78
+ def last_login
79
+ jsonist(`/usr/bin/lastlog --time 365 | awk '{ print $1 "|" $2 "|" $3 "|" $5 "-" $6 "-" $4 " " $7 $8 " " $9}'`)
80
+ end
81
+
82
+ def swap
83
+ jsonist(`/bin/cat /proc/swaps | /usr/bin/awk '{print $1"|"$2"|"$3"|"$4"|"$5}'`)
84
+ end
85
+
86
+ def users
87
+ jsonist("Time|User|Home\n#{`/usr/bin/awk -F: '{if ($3<=499) print "system|"$1"|"$6; else print "user|"$1"|"$6; }' < /etc/passwd | sort -r`}")
88
+ end
89
+
90
+ def online
91
+ jsonist(`PROCPS_FROMLEN=40 /usr/bin/w | /usr/bin/tail -n+2 | /usr/bin/awk '{print $1"|"$3"|"$4"|"$5"|"$8}'`)
92
+ end
93
+
94
+ def netstats
95
+ jsonist("Number of Connections| IP Address\n#{`netstat -ntu | awk '{print "|"$5}' | sort | uniq -c`}")
96
+ end
97
+
98
+ def ping
99
+ command_output = ''
100
+ ['gnu.org', 'github.com', 'wikipedia.org'].each do |host|
101
+ command_output += "#{host}|#{`/bin/ping -qc 2 'www.google.com' | /usr/bin/tail -n+5 | awk '{print $4}'`.split('/')[1]}\n"
102
+ end
103
+ jsonist("Host|Time (in ms)\n#{command_output}")
104
+ end
105
+
106
+ def ip
107
+ output = ''
108
+ output += "Internal ip (eth0) | #{`for interface in eth0; do for family in inet inet6; do /bin/ip -oneline -family $family addr show $interface | /bin/grep -v fe80 | /usr/bin/awk '{print $4}'; done; done`}\n"
109
+ output += "Internal ip (wlan0) | #{`for interface in wlan0; do for family in inet inet6; do /bin/ip -oneline -family $family addr show $interface | /bin/grep -v fe80 | /usr/bin/awk '{print $4}'; done; done`}"
110
+ output += "External ip | #{`curl http://ip-api.com/json/?fields=query | awk -F: '{print $2}' | awk -F'"' '{print $1 $2}'`.chomp}"
111
+ jsonist(output)
112
+ end
113
+
114
+
115
+ end
116
+
117
+ module Bandwidth
118
+
119
+ def rx
120
+ _start = `cat /sys/class/net/eth0/statistics/rx_bytes`.chomp.to_i
121
+ sleep(2)
122
+ _end = `cat /sys/class/net/eth0/statistics/rx_bytes`.chomp.to_i
123
+ (_end - _start)
124
+ end
125
+
126
+ def tx
127
+ _start = `cat /sys/class/net/eth0/statistics/tx_bytes`.chomp.to_i
128
+ sleep(2)
129
+ _end = `cat /sys/class/net/eth0/statistics/tx_bytes`.chomp.to_i
130
+ (_end - _start)
131
+ end
132
+
133
+ def bandwidth
134
+ {rx: rx, tx: tx}.to_json
135
+ end
136
+
137
+ end
138
+
139
+ module Gutter
140
+ module GutterHelper
141
+ include JsonMachinist
142
+ include GeneralInformation
143
+ include Utilities
144
+ include MemoryUsage
145
+ include Bandwidth
146
+ end
147
+ end
148
+
@@ -0,0 +1,476 @@
1
+ <div class="navbar navbar-fixed-top">
2
+ <div class="navbar-inner">
3
+ <div class="container">
4
+ <a class="brand" href="./">linux-dash</a>
5
+
6
+ <div class="nav-collapse">
7
+
8
+ <ul class="nav pull-right">
9
+ <li>
10
+ <a target="_blank" href="http://github.com/afaqurk/linux-dash">
11
+ <i class="lead icon-github-sign"></i>
12
+ <span class="lead">Contribute on GitHub</span>
13
+ </a>
14
+ </li>
15
+ </ul>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="subnavbar">
21
+ <div class="subnavbar-inner">
22
+
23
+ <a class="btn btn-navbar btn-info visible-phone" data-toggle="collapse" data-target=".nav-collapse">
24
+ <span class="icon-bar"></span>
25
+ <span class="icon-bar"></span>
26
+ <span class="icon-bar"></span>
27
+ </a>
28
+
29
+ <div class="container nav-collapse">
30
+
31
+ <ul class="mainnav">
32
+ <li>
33
+ <a class="js-smoothscroll" href="#refresh-os"><i class="icon-dashboard"></i><span>General</span></a>
34
+ </li>
35
+ <li>
36
+ <a class="js-smoothscroll" href="#refresh-df"><i class="icon-list-alt"></i><span>Disk</span></a>
37
+ </li>
38
+ <li>
39
+ <a class="js-smoothscroll" href="#refresh-ps"><i class="icon-list-alt"></i><span>CPU</span></a>
40
+ </li>
41
+ <li>
42
+ <a class="js-smoothscroll" href="#refresh-ram"><i class="icon-list-alt"></i><span>RAM</span></a>
43
+ </li>
44
+ <li>
45
+ <a class="js-smoothscroll" href="#refresh-users"><i class="icon-group"></i><span>Users</span></a>
46
+ </li>
47
+ <li>
48
+ <a class="js-smoothscroll" href="#refresh-ispeed"><i class="icon-exchange"></i><span>Network</span></a>
49
+ </li>
50
+ <li class="dropdown">
51
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
52
+ <i id="closed-widget-count">0</i>
53
+ <span> Closed Widgets <i class="icon-caret-down"></i></span>
54
+ </a>
55
+ <ul class="dropdown-menu" id="closed-widget-list">
56
+ <li id="close-all-widgets">
57
+ <a> <i class="icon-remove lead pull-left"></i> Close All Widgets</a>
58
+ </li>
59
+ <li id="open-all-widgets">
60
+ <a> <i class="icon-plus lead pull-left"></i> Open All Widgets</a>
61
+ </li>
62
+ <li class="">
63
+ <hr>
64
+ </li>
65
+ </ul>
66
+ </li>
67
+ <li class="dropdown">
68
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
69
+ <i id="phpinfo-widget-what" class="icon-info-sign"></i>
70
+ <span>PHPInfo <i class="icon-caret-down"></i></span>
71
+ </a>
72
+ <ul class="dropdown-menu" id="phpinfo-widget-opt">
73
+ <li><a href="sh/phpinfo.php?what=-1" target="_blank"><i class="icon-info"></i> - INFO_ALL</a></li>
74
+ <li><a href="sh/phpinfo.php?what=1" target="_blank"><i class="icon-info"></i> - INFO_GENERAL</a></li>
75
+ <li><a href="sh/phpinfo.php?what=4" target="_blank"><i class="icon-info"></i> - INFO_CONFIGURATION</a></li>
76
+ <li><a href="sh/phpinfo.php?what=8" target="_blank"><i class="icon-info"></i> - INFO_MODULES</a></li>
77
+ <li><a href="sh/phpinfo.php?what=16" target="_blank"><i class="icon-info"></i> - INFO_ENVIRONMENT</a></li>
78
+ <li><a href="sh/phpinfo.php?what=32" target="_blank"><i class="icon-info"></i> - INFO_VARIABLES</a></li>
79
+ <li><a href="sh/phpinfo.php?what=2" target="_blank"><i class="icon-info"></i> - INFO_CREDITS</a></li>
80
+ </ul>
81
+ </li>
82
+ </ul>
83
+ </div>
84
+ <!-- /container -->
85
+ </div>
86
+ <!-- /subnavbar-inner -->
87
+ </div><!-- /subnavbar -->
88
+ <div class="main">
89
+ <div class="main-inner">
90
+ <div class="container">
91
+ <div class="lead" style="text-align: center;">
92
+ <div class="btn icon-refresh js-refresh-info" data-title="Refresh all widgets!" data-toggle="tooltip" id="refresh-all"></div>
93
+ <div>
94
+ A simple web dashboard to monitor your server.
95
+ </div>
96
+ </div>
97
+ <div id="widgets" class="">
98
+
99
+ <div class="row">
100
+ <div class="span3">
101
+ <div id="general-info-widget" class="widget widget-table action-table">
102
+ <div class="widget-header">
103
+ <i class="icon-info-sign"></i>
104
+
105
+ <h3>
106
+ General Info
107
+ </h3>
108
+
109
+ <div id="refresh-os" class="btn icon-refresh js-refresh-info"></div>
110
+ </div>
111
+ <!-- /widget-header -->
112
+ <div class="widget-content">
113
+ <br>
114
+
115
+ <div style="text-align:center;">
116
+ <b>OS:</b> <span class="" id="os-info"></span><br>
117
+ <b>Uptime:</b> <span id="os-uptime"></span><br>
118
+ <b>Server Time:</b> <span class="" id="os-time"></span><br>
119
+ <b>Hostname:</b> <span class="" id="os-hostname"></span><br>
120
+ <br>
121
+ <br>
122
+ </div>
123
+ </div>
124
+ <!-- /widget-content -->
125
+ </div>
126
+ <!-- /widget -->
127
+ </div>
128
+
129
+ <div class="span4">
130
+ <div id="load-average-widget" class="widget">
131
+ <div class="widget-header">
132
+ <i class="icon-laptop"></i>
133
+
134
+ <h3>
135
+ Load average
136
+ </h3>
137
+
138
+ <div id="refresh-cpu" class="btn icon-refresh js-refresh-info"></div>
139
+ </div>
140
+ <!-- /widget-header -->
141
+ <div class="widget-content">
142
+ <div style="text-align:center;">
143
+ <b>Number of cores:</b> <span class="lead" id="core-number">0</span>
144
+ </div>
145
+ <div class="cf big_stats">
146
+ <div class="stat">
147
+ <i class="icon-#">1 min&nbsp;</i> <span class="value odometer" id="cpu-1min-per"></span> %<br>
148
+ <span class="value" id="cpu-1min"></span>
149
+ </div>
150
+ <!-- .stat -->
151
+ <div class="stat">
152
+ <i class="icon-#">5 min&nbsp;</i> <span class="value odometer" id="cpu-5min-per"></span> %<br>
153
+ <span class="value" id="cpu-5min"></span>
154
+ </div>
155
+ <!-- .stat -->
156
+ <div class="stat">
157
+ <i class="icon-#">15 min&nbsp;</i> <span class="value odometer" id="cpu-15min-per"></span> %<br>
158
+ <span class="value" id="cpu-15min"></span>
159
+ </div>
160
+ <!-- .stat -->
161
+ </div>
162
+ </div>
163
+ <!-- /widget-content -->
164
+ </div>
165
+ <!-- /widget -->
166
+ </div>
167
+
168
+ <div class="span5">
169
+ <div id="ram-widget" class="widget widget-nopad">
170
+ <div class="widget-header">
171
+ <i class="icon-list-alt"></i>
172
+
173
+ <h3>
174
+ RAM
175
+ </h3>
176
+
177
+ <div id="refresh-ram" class="btn icon-refresh js-refresh-info"></div>
178
+ </div>
179
+ <!-- /widget-header -->
180
+ <div class="widget-content">
181
+ <div class="big-stats-container">
182
+ <div class="widget-content">
183
+ <div class="cf big_stats">
184
+ <div class="stat">
185
+ <i class="icon-#">Total&nbsp;</i> <span class="value odometer" id="ram-total"></span> MB
186
+ </div>
187
+ <!-- .stat -->
188
+ <div class="stat">
189
+ <i class="icon-#">Used&nbsp;</i> <span class="value odometer" id="ram-used"></span> MB<br>
190
+ <span class="value odometer" id="ram-used-per"></span> %
191
+ </div>
192
+ <!-- .stat -->
193
+ <div class="stat">
194
+ <i class="icon-#">Free&nbsp;</i> <span class="value odometer" id="ram-free"></span> MB<br>
195
+ <span class="value odometer" id="ram-free-per"></span> %
196
+ </div>
197
+ <!-- .stat -->
198
+ </div>
199
+ </div>
200
+ <!-- /widget-content -->
201
+ </div>
202
+ </div>
203
+ </div>
204
+ </div>
205
+ </div>
206
+ <!-- ./row -->
207
+
208
+ <div class="row">
209
+ <div class="span6">
210
+ <div id="disk-usage-widget" class="widget widget-table">
211
+ <div class="widget-header">
212
+ <i class="icon-list"></i>
213
+
214
+ <h3>
215
+ Disk Usage
216
+ </h3>
217
+
218
+ <div id="refresh-df" class="btn icon-refresh js-refresh-info"></div>
219
+ </div>
220
+ <!-- /widget-header -->
221
+ <div class="widget-content">
222
+ <table id="df_dashboard" class="table table-hover table-condensed table-bordered"></table>
223
+ </div>
224
+ <!-- /widget-content -->
225
+ </div>
226
+ <!-- /widget -->
227
+ </div>
228
+ <div class="span6">
229
+ <div id="software-widget" class="widget widget-table">
230
+ <div class="widget-header">
231
+ <i class="icon-list"></i>
232
+
233
+ <h3>
234
+ Software
235
+ </h3>
236
+
237
+ <div id="refresh-whereis" class="btn icon-refresh js-refresh-info"></div>
238
+ </div>
239
+ <!-- /widget-header -->
240
+ <div class="widget-content">
241
+ <table id="whereis_dashboard" class="table table-hover table-condensed table-bordered"></table>
242
+ </div>
243
+ <!-- /widget-content -->
244
+ </div>
245
+ <!-- /widget -->
246
+ </div>
247
+ <!-- /span -->
248
+ </div>
249
+ <!--./row -->
250
+
251
+ <div class="row">
252
+ <!--<div class="span6">-->
253
+ <!--<div id="dns-lease-widget" class="widget widget-table">-->
254
+ <!--<div class="widget-header">-->
255
+ <!--<i class="icon-list"></i>-->
256
+
257
+ <!--<h3>-->
258
+ <!--DNS Leases-->
259
+ <!--</h3>-->
260
+
261
+ <!--<div id="refresh-dnsmasqleases" class="btn icon-refresh js-refresh-info"></div>-->
262
+ <!--</div>-->
263
+ <!--&lt;!&ndash; /widget-header &ndash;&gt;-->
264
+ <!--<div class="widget-content">-->
265
+ <!--<table id="dnsmasqleases_dashboard" class="table table-hover table-condensed table-bordered"></table>-->
266
+ <!--</div>-->
267
+ <!--&lt;!&ndash; /widget-content &ndash;&gt;-->
268
+ <!--</div>-->
269
+ <!--&lt;!&ndash; /widget &ndash;&gt;-->
270
+ <!--</div>-->
271
+ <!-- /span6 -->
272
+ <div class="span3">
273
+ <div id="ip-widget" class="widget widget-table">
274
+ <div class="widget-header">
275
+ <i class="icon-monitor"></i>
276
+
277
+ <h3>
278
+ IP
279
+ </h3>
280
+
281
+ <div id="refresh-ip" class="btn icon-refresh js-refresh-info"></div>
282
+ </div>
283
+ <!-- /widget-header -->
284
+ <div class="widget-content">
285
+ <table id="ip_dashboard" class="table table-hover table-condensed table-bordered"></table>
286
+ </div>
287
+ <!-- /widget-content -->
288
+ </div>
289
+ <!-- /widget -->
290
+ </div>
291
+ <!-- /span -->
292
+ <div class="span3">
293
+ <!--<div id="internet-speed-widget" class="widget widget-table">-->
294
+ <!--<div class="widget-header">-->
295
+ <!--<i class="icon-monitor"></i>-->
296
+
297
+ <!--<h3>-->
298
+ <!--Internet Speed-->
299
+ <!--</h3>-->
300
+
301
+ <!--<div id="refresh-ispeed" class="btn icon-refresh js-refresh-info"></div>-->
302
+ <!--</div>-->
303
+ <!--&lt;!&ndash; /widget-header &ndash;&gt;-->
304
+ <!--<div class="widget-content">-->
305
+
306
+ <!--<div style="padding:0px; text-align: center;">-->
307
+ <!--<i class="icon-download" style="font-size:18px;"></i>-->
308
+ <!--<span class="lead value odometer" style="margin-top:11px;" id="ispeed-rate-downstream">0</span>-->
309
+ <!--<span class="lead">Mbps</span>-->
310
+ <!--</div>-->
311
+ <!--<div style="padding:0px; text-align: center;">-->
312
+ <!--<i class="icon-upload" style="font-size:18px;"></i>-->
313
+ <!--<span class="lead value odometer" style="margin-top:11px;" id="ispeed-rate-upstream">0</span>-->
314
+ <!--<span class="lead">Mbps</span>-->
315
+ <!--</div>-->
316
+
317
+ <!--</div>-->
318
+ <!--&lt;!&ndash; /widget-content &ndash;&gt;-->
319
+ <!--</div>-->
320
+ <!-- /widget -->
321
+ </div>
322
+ <!-- /span -->
323
+ </div>
324
+ <!-- ./row -->
325
+
326
+ <div class="row">
327
+ <div class="span4">
328
+ <div id="netstat-widget" class="widget widget-table">
329
+ <div class="widget-header">
330
+ <i class="icon-dashboard"></i>
331
+
332
+ <h3>
333
+ Network Statistics
334
+ </h3>
335
+
336
+ <div id="refresh-netstat" class="btn icon-refresh js-refresh-info"></div>
337
+ </div>
338
+ <div class="widget-content">
339
+ <table id="netstat_dashboard" class="table table-hover table-condensed table-bordered"></table>
340
+ </div>
341
+ </div>
342
+ </div>
343
+ <div class="span4">
344
+ <div id="ping-widget" class="widget widget-table">
345
+ <div class="widget-header">
346
+ <i class="icon-exchange"></i>
347
+
348
+ <h3>
349
+ Ping
350
+ </h3>
351
+
352
+ <div id="refresh-ping" class="btn icon-refresh js-refresh-info"></div>
353
+ </div>
354
+ <div class="widget-content">
355
+ <table id="ping_dashboard" class="table table-hover table-condensed table-bordered"></table>
356
+ </div>
357
+ </div>
358
+ </div>
359
+ <div class="span4">
360
+ <div id="bandwidth-widget" class="widget widget-table">
361
+ <div class="widget-header">
362
+ <i class="icon-exchange"></i>
363
+
364
+ <h3>
365
+ Bandwidth
366
+ </h3>
367
+
368
+ <div id="refresh-bandwidth" class="btn icon-refresh js-refresh-info"></div>
369
+ </div>
370
+ <!-- /widget-header -->
371
+ <div class="widget-content">
372
+ <div style="padding:10px;text-align:center;">
373
+ RX: <span class="lead odometer" style="margin-top:11px;" id="bw-rx">0</span>&nbsp;&nbsp;|&nbsp;&nbsp; TX:
374
+ <span class="lead odometer" style="margin-top:11px;" id="bw-tx"></span>
375
+ </div>
376
+ </div>
377
+ <!-- /widget-content -->
378
+ </div>
379
+ <!-- /widget -->
380
+ </div>
381
+ <!-- /span -->
382
+ </div>
383
+ <!--./row -->
384
+
385
+ <div class="row">
386
+ <div class="span6">
387
+ <div id="users-widget" class="widget widget-table action-table">
388
+ <div class="widget-header">
389
+ <i class="icon-group"></i>
390
+
391
+ <h3>
392
+ Users
393
+ </h3>
394
+
395
+ <div id="refresh-users" class="btn icon-refresh js-refresh-info"></div>
396
+ </div>
397
+ <!-- /widget-header -->
398
+ <div class="widget-content">
399
+ <table id="users_dashboard" class="table table-hover table-bordered table-condensed"></table>
400
+ </div>
401
+ <!-- /widget-content -->
402
+ </div>
403
+ <!-- /widget -->
404
+ </div>
405
+ <!-- /span6 -->
406
+ <div class="span6">
407
+ <div id="online-widget" class="widget widget-table action-table">
408
+ <div class="widget-header">
409
+ <i class="icon-group"></i>
410
+
411
+ <h3>
412
+ Online
413
+ </h3>
414
+
415
+ <div id="refresh-online" class="btn icon-refresh js-refresh-info"></div>
416
+ </div>
417
+ <!-- /widget-header -->
418
+ <div class="widget-content">
419
+ <table id="online_dashboard" class="table table-hover table-bordered table-condensed"></table>
420
+ </div>
421
+ <!-- /widget-content -->
422
+ </div>
423
+ <!-- /widget -->
424
+ </div>
425
+ <!-- /span6 -->
426
+ </div>
427
+ <!--./row -->
428
+
429
+ <div class="row">
430
+ <div class="span12">
431
+ <div id="process-widget" class="widget widget-table">
432
+ <div class="widget-header">
433
+ <i class="icon-dashboard"></i>
434
+
435
+ <h3>
436
+ Processes
437
+ </h3>
438
+
439
+ <div id="refresh-ps" class="btn icon-refresh js-refresh-info"></div>
440
+ <div class="pull-right">
441
+ <input type="text" id="filter-ps" class="widget-search" placeholder="search...">
442
+ </div>
443
+ </div>
444
+ <!-- /widget-header -->
445
+ <div class="widget-content">
446
+ <table id="ps_dashboard" class="table table-hover table-condensed table-bordered"></table>
447
+ </div>
448
+ <!-- /widget-content -->
449
+ </div>
450
+ <!-- /widget -->
451
+ </div>
452
+ <!-- /span -->
453
+ </div>
454
+ <!-- ./row -->
455
+
456
+ </div>
457
+ <!-- #/widgets -->
458
+ </div>
459
+ </div>
460
+ <!-- /main-inner -->
461
+ </div><!-- /main -->
462
+ <div class="footer">
463
+ <div class="footer-inner">
464
+ <div class="container">
465
+ <div class="row">
466
+ <div class="span12">
467
+ Original Author: <a href="http://github.com/afaqurk">Afaq Tariq</a>.
468
+ </div>
469
+ <!-- /span12 -->
470
+ </div>
471
+ <!-- /row -->
472
+ </div>
473
+ <!-- /container -->
474
+ </div>
475
+ <!-- /footer-inner -->
476
+ </div><!-- /footer -->