fluentd-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fluentd-ui might be problematic. Click here for more details.

Files changed (320) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +31 -0
  4. data/.rspec +1 -0
  5. data/ChangeLog +3 -0
  6. data/Gemfile +21 -0
  7. data/Gemfile.lock +247 -0
  8. data/Gemfile.production +3 -0
  9. data/README.md +53 -0
  10. data/Rakefile +8 -0
  11. data/app/assets/images/.keep +0 -0
  12. data/app/assets/javascripts/alert.js +51 -0
  13. data/app/assets/javascripts/application.js +22 -0
  14. data/app/assets/javascripts/nested_setting.js +41 -0
  15. data/app/assets/javascripts/setting_format.js +15 -0
  16. data/app/assets/javascripts/tutorial.js +58 -0
  17. data/app/assets/javascripts/vue/fluent_log.js +64 -0
  18. data/app/assets/javascripts/vue/in_tail_format.js +153 -0
  19. data/app/assets/javascripts/vue/treeview.js +97 -0
  20. data/app/assets/javascripts/vue_common.js +4 -0
  21. data/app/assets/stylesheets/application.css +18 -0
  22. data/app/assets/stylesheets/common.css.scss +152 -0
  23. data/app/controllers/api_controller.rb +37 -0
  24. data/app/controllers/application_controller.rb +110 -0
  25. data/app/controllers/concerns/.keep +0 -0
  26. data/app/controllers/fluentd/agents_controller.rb +35 -0
  27. data/app/controllers/fluentd/settings/in_syslog_controller.rb +34 -0
  28. data/app/controllers/fluentd/settings/in_tail_controller.rb +57 -0
  29. data/app/controllers/fluentd/settings/out_forward_controller.rb +42 -0
  30. data/app/controllers/fluentd/settings/out_mongo_controller.rb +36 -0
  31. data/app/controllers/fluentd/settings/out_s3_controller.rb +36 -0
  32. data/app/controllers/fluentd/settings/out_td_controller.rb +36 -0
  33. data/app/controllers/fluentd/settings_controller.rb +18 -0
  34. data/app/controllers/fluentd_controller.rb +62 -0
  35. data/app/controllers/misc_controller.rb +69 -0
  36. data/app/controllers/plugins_controller.rb +44 -0
  37. data/app/controllers/polling_controller.rb +20 -0
  38. data/app/controllers/sessions_controller.rb +45 -0
  39. data/app/controllers/tutorials_controller.rb +40 -0
  40. data/app/controllers/users_controller.rb +28 -0
  41. data/app/controllers/welcome_controller.rb +5 -0
  42. data/app/helpers/application_helper.rb +55 -0
  43. data/app/helpers/fluentd/settings_helper.rb +2 -0
  44. data/app/helpers/miscs_helper.rb +2 -0
  45. data/app/helpers/settings_helper.rb +43 -0
  46. data/app/mailers/.keep +0 -0
  47. data/app/models/.keep +0 -0
  48. data/app/models/concerns/.keep +0 -0
  49. data/app/models/fluentd.rb +178 -0
  50. data/app/models/fluentd/agent.rb +28 -0
  51. data/app/models/fluentd/agent/common.rb +76 -0
  52. data/app/models/fluentd/agent/configuration.rb +35 -0
  53. data/app/models/fluentd/agent/fluentd_gem.rb +104 -0
  54. data/app/models/fluentd/agent/local_common.rb +101 -0
  55. data/app/models/fluentd/agent/remote.rb +7 -0
  56. data/app/models/fluentd/agent/td_agent.rb +44 -0
  57. data/app/models/fluentd/api.rb +6 -0
  58. data/app/models/fluentd/api/http.rb +26 -0
  59. data/app/models/fluentd/setting.rb +4 -0
  60. data/app/models/fluentd/setting/common.rb +185 -0
  61. data/app/models/fluentd/setting/in_syslog.rb +16 -0
  62. data/app/models/fluentd/setting/in_tail.rb +107 -0
  63. data/app/models/fluentd/setting/out_forward.rb +70 -0
  64. data/app/models/fluentd/setting/out_mongo.rb +35 -0
  65. data/app/models/fluentd/setting/out_s3.rb +29 -0
  66. data/app/models/fluentd/setting/out_td.rb +26 -0
  67. data/app/models/plugin.rb +193 -0
  68. data/app/models/settings.rb +4 -0
  69. data/app/models/user.rb +52 -0
  70. data/app/views/fluentd/_form.html.haml +31 -0
  71. data/app/views/fluentd/edit.html.haml +3 -0
  72. data/app/views/fluentd/errors.html.haml +19 -0
  73. data/app/views/fluentd/log.html.haml +9 -0
  74. data/app/views/fluentd/new.html.haml +3 -0
  75. data/app/views/fluentd/settings/_form.html.haml +43 -0
  76. data/app/views/fluentd/settings/edit.html.haml +7 -0
  77. data/app/views/fluentd/settings/in_syslog/_form.html.haml +9 -0
  78. data/app/views/fluentd/settings/in_syslog/show.html.haml +6 -0
  79. data/app/views/fluentd/settings/in_tail/_form.html.haml +42 -0
  80. data/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +19 -0
  81. data/app/views/fluentd/settings/in_tail/after_format.html.haml +10 -0
  82. data/app/views/fluentd/settings/in_tail/confirm.html.haml +13 -0
  83. data/app/views/fluentd/settings/in_tail/show.html.haml +5 -0
  84. data/app/views/fluentd/settings/out_forward/_form.html.haml +22 -0
  85. data/app/views/fluentd/settings/out_forward/show.html.haml +6 -0
  86. data/app/views/fluentd/settings/out_mongo/_form.html.haml +30 -0
  87. data/app/views/fluentd/settings/out_mongo/finish.html.haml +4 -0
  88. data/app/views/fluentd/settings/out_mongo/show.html.haml +6 -0
  89. data/app/views/fluentd/settings/out_s3/_form.html.haml +39 -0
  90. data/app/views/fluentd/settings/out_s3/show.html.haml +6 -0
  91. data/app/views/fluentd/settings/out_td/_form.html.haml +18 -0
  92. data/app/views/fluentd/settings/out_td/show.html.haml +6 -0
  93. data/app/views/fluentd/settings/show.html.haml +10 -0
  94. data/app/views/fluentd/settings/source_and_output.html.haml +45 -0
  95. data/app/views/fluentd/show.html.haml +60 -0
  96. data/app/views/layouts/application.html.erb +102 -0
  97. data/app/views/layouts/sign_in.html.erb +28 -0
  98. data/app/views/misc/information.html.haml +75 -0
  99. data/app/views/misc/update_fluentd_ui.html.haml +45 -0
  100. data/app/views/plugins/installed.html.haml +67 -0
  101. data/app/views/plugins/recommended.html.haml +59 -0
  102. data/app/views/plugins/updated.html.haml +29 -0
  103. data/app/views/sessions/new.html.haml +13 -0
  104. data/app/views/shared/_error.html.haml +3 -0
  105. data/app/views/shared/_flash.html.haml +10 -0
  106. data/app/views/shared/_fluentd_nav.html.haml +12 -0
  107. data/app/views/shared/_global_nav.html.erb +80 -0
  108. data/app/views/shared/_initial_setup.html.haml +13 -0
  109. data/app/views/shared/_modal.html.erb +25 -0
  110. data/app/views/shared/_setting_errors.html.haml +5 -0
  111. data/app/views/shared/vue/_fluent_log.html.erb +25 -0
  112. data/app/views/shared/vue/_in_tail_format.html.erb +53 -0
  113. data/app/views/shared/vue/_treeview.html.erb +30 -0
  114. data/app/views/tutorials/chapter1.html.erb +31 -0
  115. data/app/views/tutorials/chapter2.html.haml +12 -0
  116. data/app/views/tutorials/chapter3.html.haml +12 -0
  117. data/app/views/tutorials/chapter4.html.haml +12 -0
  118. data/app/views/tutorials/chapter5.html.haml +10 -0
  119. data/app/views/tutorials/index.html.haml +26 -0
  120. data/app/views/users/show.html.haml +22 -0
  121. data/app/workers/all_plugin_check_update.rb +14 -0
  122. data/app/workers/fluentd_ui_restart.rb +41 -0
  123. data/app/workers/fluentd_ui_update_check.rb +15 -0
  124. data/app/workers/gem_installer.rb +17 -0
  125. data/app/workers/gem_uninstaller.rb +15 -0
  126. data/app/workers/gem_update_check.rb +10 -0
  127. data/bin/bundle +3 -0
  128. data/bin/fluentd-ui +13 -0
  129. data/bin/fluentd-ui-restart +12 -0
  130. data/bin/rails +8 -0
  131. data/bin/rake +8 -0
  132. data/bin/spring +18 -0
  133. data/bower.json +10 -0
  134. data/circle.yml +8 -0
  135. data/config.ru +4 -0
  136. data/config/application.rb +48 -0
  137. data/config/application.yml +211 -0
  138. data/config/boot.rb +4 -0
  139. data/config/environment.rb +5 -0
  140. data/config/environments/development.rb +36 -0
  141. data/config/environments/production.rb +69 -0
  142. data/config/environments/test.rb +40 -0
  143. data/config/initializers/backtrace_silencers.rb +7 -0
  144. data/config/initializers/cookies_serializer.rb +3 -0
  145. data/config/initializers/filter_parameter_logging.rb +4 -0
  146. data/config/initializers/inflections.rb +16 -0
  147. data/config/initializers/mime_types.rb +4 -0
  148. data/config/initializers/prefetch_gem_updates.rb +1 -0
  149. data/config/initializers/session_store.rb +3 -0
  150. data/config/initializers/wrap_parameters.rb +14 -0
  151. data/config/locales/en.yml +204 -0
  152. data/config/locales/ja.yml +194 -0
  153. data/config/locales/translation_en.yml +255 -0
  154. data/config/locales/translation_ja.yml +255 -0
  155. data/config/locales/tutorial_en.yml +117 -0
  156. data/config/locales/tutorial_ja.yml +120 -0
  157. data/config/routes.rb +93 -0
  158. data/config/secrets.yml +22 -0
  159. data/db/schema.rb +0 -0
  160. data/db/seeds.rb +11 -0
  161. data/fluentd-ui-ss01.png +0 -0
  162. data/fluentd-ui-ss02.png +0 -0
  163. data/fluentd-ui-ss03.png +0 -0
  164. data/fluentd-ui-ss04.png +0 -0
  165. data/fluentd-ui-ss05.png +0 -0
  166. data/fluentd-ui.gemspec +46 -0
  167. data/lib/assets/.keep +0 -0
  168. data/lib/file_reverse_reader.rb +56 -0
  169. data/lib/fluentd-ui.rb +22 -0
  170. data/lib/fluentd-ui/command.rb +52 -0
  171. data/lib/fluentd-ui/version.rb +3 -0
  172. data/lib/grok_converter.rb +39 -0
  173. data/lib/regexp_preview.rb +48 -0
  174. data/lib/tasks/.keep +0 -0
  175. data/lib/treeview.rb +45 -0
  176. data/log/.keep +0 -0
  177. data/public/404.html +67 -0
  178. data/public/422.html +67 -0
  179. data/public/500.html +66 -0
  180. data/public/favicon.ico +0 -0
  181. data/public/fluentd-logo-right-text.png +0 -0
  182. data/public/fluentd-logo.png +0 -0
  183. data/public/fluentd.png +0 -0
  184. data/public/robots.txt +5 -0
  185. data/spec/controllers/plugins_controller_spec.rb +5 -0
  186. data/spec/controllers/polling_controller_spec.rb +5 -0
  187. data/spec/controllers/sessions_controller_spec.rb +5 -0
  188. data/spec/controllers/tutorials_controller_spec.rb +5 -0
  189. data/spec/factories/fluentd.rb +11 -0
  190. data/spec/factories/plugins.rb +8 -0
  191. data/spec/factories/user.rb +6 -0
  192. data/spec/features/fluentd/setting/out_forward_spec.rb +45 -0
  193. data/spec/features/fluentd/setting/out_td_spec.rb +35 -0
  194. data/spec/features/sessions_spec.rb +55 -0
  195. data/spec/features/shared_examples/login_required.rb +4 -0
  196. data/spec/features/users_spec.rb +9 -0
  197. data/spec/grok_converter_spec.rb +50 -0
  198. data/spec/lib/file_reverse_reader_spec.rb +73 -0
  199. data/spec/lib/fluentd-ui_spec.rb +35 -0
  200. data/spec/models/fluentd/agent_spec.rb +91 -0
  201. data/spec/models/fluentd/setting/common_spec.rb +178 -0
  202. data/spec/models/fluentd/setting/in_syslog_spec.rb +35 -0
  203. data/spec/models/fluentd/setting/out_mongo_spec.rb +40 -0
  204. data/spec/models/fluentd/setting/out_td_spec.rb +38 -0
  205. data/spec/models/fluentd_spec.rb +166 -0
  206. data/spec/models/plugin_spec.rb +191 -0
  207. data/spec/models/user_spec.rb +15 -0
  208. data/spec/spec_helper.rb +58 -0
  209. data/spec/support/fixtures/error0.log +12 -0
  210. data/spec/support/fixtures/error2.log +130 -0
  211. data/spec/support/fluentd_agent_common_behavior.rb +114 -0
  212. data/spec/support/fluentd_agent_restart_strategy.rb +94 -0
  213. data/tmp/.gitkeep +0 -0
  214. data/vendor/assets/javascripts/.keep +0 -0
  215. data/vendor/assets/javascripts/bower/es6-promise/.bower.json +15 -0
  216. data/vendor/assets/javascripts/bower/es6-promise/bower.json +5 -0
  217. data/vendor/assets/javascripts/bower/es6-promise/promise.js +684 -0
  218. data/vendor/assets/javascripts/bower/es6-promise/promise.min.js +1 -0
  219. data/vendor/assets/javascripts/bower/lodash/.bower.json +33 -0
  220. data/vendor/assets/javascripts/bower/lodash/LICENSE.txt +22 -0
  221. data/vendor/assets/javascripts/bower/lodash/bower.json +23 -0
  222. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.js +7157 -0
  223. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.min.js +61 -0
  224. data/vendor/assets/javascripts/bower/lodash/dist/lodash.js +6785 -0
  225. data/vendor/assets/javascripts/bower/lodash/dist/lodash.min.js +56 -0
  226. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.js +4979 -0
  227. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.min.js +39 -0
  228. data/vendor/assets/javascripts/bower/vue/.bower.json +29 -0
  229. data/vendor/assets/javascripts/bower/vue/LICENSE +21 -0
  230. data/vendor/assets/javascripts/bower/vue/dist/vue.js +4713 -0
  231. data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +7 -0
  232. data/vendor/assets/javascripts/bower/vue/src/batcher.js +45 -0
  233. data/vendor/assets/javascripts/bower/vue/src/binding.js +103 -0
  234. data/vendor/assets/javascripts/bower/vue/src/compiler.js +1037 -0
  235. data/vendor/assets/javascripts/bower/vue/src/config.js +19 -0
  236. data/vendor/assets/javascripts/bower/vue/src/deps-parser.js +65 -0
  237. data/vendor/assets/javascripts/bower/vue/src/directive.js +258 -0
  238. data/vendor/assets/javascripts/bower/vue/src/directives/html.js +41 -0
  239. data/vendor/assets/javascripts/bower/vue/src/directives/if.js +56 -0
  240. data/vendor/assets/javascripts/bower/vue/src/directives/index.js +129 -0
  241. data/vendor/assets/javascripts/bower/vue/src/directives/model.js +174 -0
  242. data/vendor/assets/javascripts/bower/vue/src/directives/on.js +56 -0
  243. data/vendor/assets/javascripts/bower/vue/src/directives/partial.js +50 -0
  244. data/vendor/assets/javascripts/bower/vue/src/directives/repeat.js +246 -0
  245. data/vendor/assets/javascripts/bower/vue/src/directives/style.js +40 -0
  246. data/vendor/assets/javascripts/bower/vue/src/directives/view.js +56 -0
  247. data/vendor/assets/javascripts/bower/vue/src/directives/with.js +50 -0
  248. data/vendor/assets/javascripts/bower/vue/src/emitter.js +97 -0
  249. data/vendor/assets/javascripts/bower/vue/src/exp-parser.js +190 -0
  250. data/vendor/assets/javascripts/bower/vue/src/filters.js +190 -0
  251. data/vendor/assets/javascripts/bower/vue/src/fragment.js +84 -0
  252. data/vendor/assets/javascripts/bower/vue/src/main.js +186 -0
  253. data/vendor/assets/javascripts/bower/vue/src/observer.js +446 -0
  254. data/vendor/assets/javascripts/bower/vue/src/text-parser.js +96 -0
  255. data/vendor/assets/javascripts/bower/vue/src/transition.js +228 -0
  256. data/vendor/assets/javascripts/bower/vue/src/utils.js +321 -0
  257. data/vendor/assets/javascripts/bower/vue/src/viewmodel.js +180 -0
  258. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.js +1951 -0
  259. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.min.js +6 -0
  260. data/vendor/assets/javascripts/sb-admin-v2/demo/dashboard-demo.js +117 -0
  261. data/vendor/assets/javascripts/sb-admin-v2/demo/flot-demo.js +1242 -0
  262. data/vendor/assets/javascripts/sb-admin-v2/demo/morris-demo.js +155 -0
  263. data/vendor/assets/javascripts/sb-admin-v2/jquery-1.10.2.js +6 -0
  264. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.js +245 -0
  265. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/jquery.dataTables.js +14013 -0
  266. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/excanvas.min.js +1 -0
  267. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.js +2599 -0
  268. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.pie.js +750 -0
  269. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.resize.js +60 -0
  270. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.tooltip.min.js +12 -0
  271. data/vendor/assets/javascripts/sb-admin-v2/plugins/metisMenu/jquery.metisMenu.js +45 -0
  272. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/morris.js +1888 -0
  273. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/raphael-2.1.0.min.js +10 -0
  274. data/vendor/assets/javascripts/sb-admin-v2/sb-admin.js +18 -0
  275. data/vendor/assets/stylesheets/.keep +0 -0
  276. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.css +5830 -0
  277. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.min.css +7 -0
  278. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.css +1338 -0
  279. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.min.css +4 -0
  280. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/FontAwesome.otf +0 -0
  281. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  282. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.svg +414 -0
  283. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  284. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  285. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_bordered-pulled.scss +16 -0
  286. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_core.scss +12 -0
  287. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_fixed-width.scss +6 -0
  288. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_icons.scss +412 -0
  289. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_larger.scss +13 -0
  290. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_list.scss +19 -0
  291. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_mixins.scss +20 -0
  292. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_path.scss +14 -0
  293. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_rotated-flipped.scss +9 -0
  294. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_spinning.scss +30 -0
  295. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_stacked.scss +20 -0
  296. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_variables.scss +381 -0
  297. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/font-awesome.scss +17 -0
  298. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.eot +0 -0
  299. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.svg +229 -0
  300. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.ttf +0 -0
  301. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.woff +0 -0
  302. data/vendor/assets/stylesheets/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.css +233 -0
  303. data/vendor/assets/stylesheets/sb-admin-v2/plugins/morris/morris-0.4.3.min.css +2 -0
  304. data/vendor/assets/stylesheets/sb-admin-v2/plugins/social-buttons/social-buttons.css +68 -0
  305. data/vendor/assets/stylesheets/sb-admin-v2/plugins/timeline/timeline.css +144 -0
  306. data/vendor/assets/stylesheets/sb-admin-v2/sb-admin.css +329 -0
  307. data/vendor/patterns/firewalls +60 -0
  308. data/vendor/patterns/grok-patterns +94 -0
  309. data/vendor/patterns/haproxy +37 -0
  310. data/vendor/patterns/java +3 -0
  311. data/vendor/patterns/junos +9 -0
  312. data/vendor/patterns/linux-syslog +16 -0
  313. data/vendor/patterns/mcollective +1 -0
  314. data/vendor/patterns/mcollective-patterns +4 -0
  315. data/vendor/patterns/mongodb +4 -0
  316. data/vendor/patterns/nagios +108 -0
  317. data/vendor/patterns/postgresql +3 -0
  318. data/vendor/patterns/redis +3 -0
  319. data/vendor/patterns/ruby +2 -0
  320. metadata +659 -0
@@ -0,0 +1,5 @@
1
+ class WelcomeController < ApplicationController
2
+ def home
3
+ redirect_to daemon_path
4
+ end
5
+ end
@@ -0,0 +1,55 @@
1
+ # coding: utf-8
2
+
3
+ module ApplicationHelper
4
+ def has_td_agent_system?
5
+ File.exist?("/etc/init.d/td-agent")
6
+ end
7
+
8
+ def fluentd_ui_logo
9
+ image_tag(ENV["FLUENTD_UI_LOGO"] || "/fluentd-logo-right-text.png")
10
+ end
11
+
12
+ def language_name(locale)
13
+ # NOTE: these are fixed terms, not i18n-ed
14
+ {
15
+ en: "English",
16
+ ja: "日本語",
17
+ }[locale] || locale
18
+ end
19
+
20
+ def language_menu
21
+ html = ""
22
+ I18n.available_locales.each do |locale|
23
+ text = (locale == current_locale ? icon("fa-check") : "")
24
+ text << language_name(locale)
25
+ html << %Q|<li>#{link_to text , "?lang=#{locale}"}</li>|
26
+ end
27
+ raw html
28
+ end
29
+
30
+ def link_to_other(text, path)
31
+ if current_page?(path)
32
+ # NOTE: sb-admin set style for element name instead of class name, such as ".nav a". So use "a" element even if it isn't a link.
33
+ content_tag(:a, text, class: "current")
34
+ else
35
+ link_to text, path
36
+ end
37
+ end
38
+
39
+ def icon(classes, inner=nil)
40
+ %Q!<i class="fa #{classes}">#{inner}</i> !.html_safe
41
+ end
42
+
43
+ def page_title(title, &block)
44
+ content_for(:page_title) do
45
+ title
46
+ end
47
+ page_head(title, &block) unless content_for?(:page_head)
48
+ end
49
+
50
+ def page_head(head, &block)
51
+ content_for(:page_head) do
52
+ head.html_safe + block.try(:call).to_s
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,2 @@
1
+ module Fluentd::SettingsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module MiscsHelper
2
+ end
@@ -0,0 +1,43 @@
1
+ module SettingsHelper
2
+ def field(form, key, opts = {})
3
+ html = '<div class="form-group">'
4
+
5
+ case form.object.column_type(key)
6
+ when :hidden
7
+ return form.hidden_field(key)
8
+ when :boolean, :flag
9
+ html << form.check_box(key, {}, "true", "false")
10
+ html << " " # NOTE: Adding space for padding
11
+ html << h(form.label(key))
12
+ when :choice
13
+ html << h(form.label(key))
14
+ html << " " # NOTE: Adding space for padding
15
+ html << form.select(key, form.object.values_of(key), opts)
16
+ when :nested
17
+ child_data = form.object.class.children[key]
18
+ klass = child_data[:class]
19
+ options = child_data[:options]
20
+ children = form.object.send(key) || {"0" => {}}
21
+ children.each_pair do |index, child|
22
+ html << %Q!<div class="js-nested-column #{options[:multiple] ? "js-multiple" : ""} well well-sm">!
23
+ if options[:multiple]
24
+ html << %Q!<a class="btn btn-xs btn-default js-append">#{icon('fa-plus')}</a> !
25
+ html << %Q!<a class="btn btn-xs btn-default js-remove" style="display:none">#{icon('fa-minus')}</a> !
26
+ end
27
+ html << h(form.label(key))
28
+ form.fields_for("#{key}[#{index}]", klass.new(child)) do |ff|
29
+ klass::KEYS.each do |k|
30
+ html << field(ff, k)
31
+ end
32
+ end
33
+ html << "</div>"
34
+ end
35
+ else
36
+ html << h(form.label(key))
37
+ html << form.text_field(key, class: "form-control")
38
+ end
39
+
40
+ html << "</div>"
41
+ html.html_safe
42
+ end
43
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,178 @@
1
+ class Fluentd
2
+ include ActiveModel::Model
3
+ include ActiveModel::Validations::Callbacks
4
+
5
+ validates :variant, inclusion: { in: proc { Fluentd.variants } }
6
+ validates :log_file, presence: true
7
+ validates :pid_file, presence: true
8
+ validates :config_file, presence: true
9
+ validate :validate_permissions
10
+
11
+ before_validation :expand_paths
12
+
13
+ COLUMNS = [:id, :variant, :log_file, :pid_file, :config_file]
14
+ DEFAULT_CONF = <<-CONF.strip_heredoc
15
+ <source>
16
+ # http://docs.fluentd.org/articles/in_forward
17
+ type forward
18
+ port 24224
19
+ </source>
20
+
21
+ <source>
22
+ # http://docs.fluentd.org/articles/in_http
23
+ type http
24
+ port 9880
25
+ </source>
26
+
27
+ <source>
28
+ type monitor_agent
29
+ port 24220
30
+ </source>
31
+ <source>
32
+ type debug_agent
33
+ port 24230
34
+ </source>
35
+
36
+ <match debug.*>
37
+ # http://docs.fluentd.org/articles/out_stdout
38
+ type stdout
39
+ </match>
40
+ CONF
41
+
42
+ attr_accessor(*COLUMNS)
43
+
44
+ def self.variants
45
+ %w(fluentd_gem td-agent)
46
+ end
47
+
48
+ def self.json_path
49
+ if ENV["FLUENTD_UI_DATA_DIR"].present?
50
+ dir = ENV["FLUENTD_UI_DATA_DIR"]
51
+ else
52
+ dir = ENV["HOME"] + "/.fluentd-ui/core_data"
53
+ end
54
+ FileUtils.mkdir_p(dir)
55
+ dir + "/#{Rails.env}-fluentd.json"
56
+ end
57
+
58
+ def fluentd?
59
+ variant == "fluentd_gem"
60
+ end
61
+ alias :fluentd_gem? :fluentd?
62
+
63
+ def td_agent?
64
+ variant == "td-agent"
65
+ end
66
+
67
+ def agent
68
+ klass = variant.underscore.camelize
69
+ Agent.const_get(klass).new({
70
+ :pid_file => pid_file,
71
+ :log_file => log_file,
72
+ :config_file => config_file,
73
+ })
74
+ end
75
+
76
+ def load_settings_from_agent_default
77
+ agent.class.default_options.each_pair do |key, value|
78
+ send("#{key}=", value)
79
+ end
80
+ end
81
+
82
+ def api
83
+ Api::Http.new(api_endpoint)
84
+ end
85
+
86
+ def api_endpoint
87
+ # TODO: autodetect from parsed configuration, but unused for now
88
+ end
89
+
90
+ def label
91
+ "fluentd" # NOTE: for multiple fluentd management, but only single fluentd manage now
92
+ end
93
+
94
+ def expand_paths
95
+ %w(pid_file log_file config_file).each do |column|
96
+ path = send(column)
97
+ next if path.blank?
98
+ self.send("#{column}=", File.expand_path(path))
99
+ end
100
+ end
101
+
102
+ def validate_permissions
103
+ %w(pid_file log_file config_file).each do |column|
104
+ check_permission(column)
105
+ end
106
+ end
107
+
108
+ def check_permission(column)
109
+ path = send(column)
110
+ return if path.blank? # if empty, presence: true will catch it
111
+
112
+ begin
113
+ FileUtils.mkdir_p(File.dirname(path))
114
+ rescue Errno::EACCES
115
+ errors.add(column, :lack_write_permission)
116
+ return
117
+ end
118
+
119
+ if File.exist?(path)
120
+ if File.directory?(path)
121
+ errors.add(column, :is_a_directory)
122
+ end
123
+
124
+ unless File.writable?(path)
125
+ errors.add(column, :lack_write_permission)
126
+ end
127
+ unless File.readable?(path)
128
+ errors.add(column, :lack_read_permission)
129
+ end
130
+ else
131
+ unless File.writable?(File.dirname(path))
132
+ errors.add(column, :lack_write_permission)
133
+ end
134
+ end
135
+ end
136
+
137
+ def ensure_default_config_file
138
+ return true if File.size?(config_file)
139
+
140
+ File.open(config_file, "w") do |f|
141
+ f.write DEFAULT_CONF
142
+ end
143
+ end
144
+
145
+
146
+ # ActiveRecord mimic
147
+
148
+ def self.instance
149
+ return unless exists?
150
+ attr = JSON.parse(File.read(json_path))
151
+ Fluentd.new(attr)
152
+ end
153
+
154
+ def self.exists?
155
+ File.exists?(json_path)
156
+ end
157
+
158
+ def update_attributes(params)
159
+ params.each_pair do |k, v|
160
+ send("#{k}=", v)
161
+ end
162
+ end
163
+
164
+ def save
165
+ return false unless valid?
166
+ json = COLUMNS.inject({}) do |result, col|
167
+ result[col] = send(col)
168
+ result
169
+ end.to_json
170
+ File.open(self.class.json_path, "w") do |f|
171
+ f.write json
172
+ end && ensure_default_config_file
173
+ end
174
+
175
+ def destroy
176
+ File.unlink(self.class.json_path)
177
+ end
178
+ end
@@ -0,0 +1,28 @@
1
+ require 'fluent/log'
2
+ require 'fluent/env'
3
+ require 'fluent/version'
4
+ require 'fluent/supervisor'
5
+ require "fluentd/agent/common"
6
+ require "fluentd/agent/fluentd_gem"
7
+ require "fluentd/agent/td_agent"
8
+ require "fluentd/agent/remote"
9
+
10
+ class Fluentd
11
+ class Agent
12
+ # pidfile
13
+ # td-agent: /var/run/td-agent/td-agent.pid
14
+ # - https://github.com/treasure-data/td-agent/blob/master/td-agent.logrotate#L10
15
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L25
16
+ # fluentd: nothing (or --daemon PIDFILE)
17
+ #
18
+ # logfile
19
+ # td-agent: /var/log/td-agent/td-agent.log
20
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L28
21
+ # fluentd: stdout (or --log LOGFILE)
22
+ #
23
+ # config file
24
+ # td-agent: /etc/td-agent/td-agent.conf
25
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.postinst#L69
26
+ # fluentd: /etc/fluent/fluent.conf (by fluentd -s)
27
+ end
28
+ end
@@ -0,0 +1,76 @@
1
+ # pidfile
2
+ # td-agent: /var/run/td-agent/td-agent.pid
3
+ # - https://github.com/treasure-data/td-agent/blob/master/td-agent.logrotate#L10
4
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L25
5
+ # fluentd: nothing (or --daemon PIDFILE)
6
+ #
7
+ # logfile
8
+ # td-agent: /var/log/td-agent/td-agent.log
9
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.init#L28
10
+ # fluentd: stdout (or --log LOGFILE)
11
+ #
12
+ # config file
13
+ # td-agent: /etc/td-agent/td-agent.conf
14
+ # - https://github.com/treasure-data/td-agent/blob/master/debian/td-agent.postinst#L69
15
+ # fluentd: /etc/fluent/fluent.conf (by fluentd -s)
16
+
17
+ class Fluentd
18
+ class Agent
19
+ module Common
20
+ attr_reader :extra_options
21
+
22
+ def initialize(options = {})
23
+ @extra_options = options
24
+ end
25
+
26
+ def wait_process_starting_seconds
27
+ 10.seconds # wait time for fluentd pidfile created
28
+ end
29
+
30
+ def errors_since(since = 1.day.ago)
31
+ errors = []
32
+ logged_errors do |error|
33
+ break if Time.parse(error[:subject]) < since
34
+ errors << error
35
+ end
36
+ errors
37
+ end
38
+
39
+ def recent_errors(limit = 3)
40
+ errors = []
41
+ logged_errors do |error|
42
+ errors << error
43
+ break if errors.length >= limit
44
+ end
45
+ errors
46
+ end
47
+
48
+ def pid_file
49
+ extra_options[:pid_file] || self.class.default_options[:pid_file]
50
+ end
51
+
52
+ def log_file
53
+ extra_options[:log_file] || self.class.default_options[:log_file]
54
+ end
55
+
56
+ def config_file
57
+ extra_options[:config_file] || self.class.default_options[:config_file]
58
+ end
59
+
60
+
61
+ # define these methods on each Agent class
62
+
63
+ %w(start stop restart).each do |method|
64
+ define_method(method) do
65
+ raise NotImplementedError, "'#{method}' method is required to be defined"
66
+ end
67
+ end
68
+
69
+ %w(running? version log config config_write config_append log_tail configuration).each do |method|
70
+ define_method(method) do
71
+ raise NotImplementedError, "'#{method}' method is required to be defined"
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,35 @@
1
+ require "fluent/config/v1_parser"
2
+
3
+ class Fluentd
4
+ class Agent
5
+ class Configuration
6
+ include Enumerable
7
+
8
+ attr_reader :file
9
+
10
+ def initialize(config_file)
11
+ @file = config_file
12
+ end
13
+
14
+ def config
15
+ @config ||= ::Fluent::Config::V1Parser.parse(File.read(file), File.basename(file), File.dirname(file))
16
+ end
17
+
18
+ def to_s
19
+ config.to_s.gsub(/\A<ROOT>\n/, "").gsub(/<\/ROOT>\n\z/, "").gsub(/^ {2}/, "")
20
+ end
21
+
22
+ def each(&block)
23
+ config.each_element(&block)
24
+ end
25
+
26
+ def sources
27
+ find_all{|e| e.name == "source"}
28
+ end
29
+
30
+ def matches
31
+ find_all{|e| e.name == "match"}
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,104 @@
1
+ class Fluentd
2
+ class Agent
3
+ class FluentdGem
4
+ include Common
5
+ include LocalCommon
6
+
7
+ def self.default_options
8
+ {
9
+ :pid_file => "#{ENV["HOME"]}/.fluentd-ui/fluent.pid",
10
+ :log_file => "#{ENV["HOME"]}/.fluentd-ui/fluent.log",
11
+ :config_file => "#{ENV["HOME"]}/.fluentd-ui/fluent.conf",
12
+ }
13
+ end
14
+
15
+ # return value is status_after_this_method_called == started
16
+ def start
17
+ return true if running?
18
+ actual_start
19
+ end
20
+
21
+ # return value is status_after_this_method_called == stopped
22
+ def stop
23
+ return true unless running?
24
+ actual_stop
25
+ end
26
+
27
+ # return value is status_after_this_method_called == started
28
+ def restart
29
+ if running?
30
+ validate_fluentd_options && stop && start
31
+ else
32
+ # NOTE: no path to here from browser operations for now
33
+ start
34
+ end
35
+ end
36
+
37
+ def reload # NOTE: does not used currently, and td-agent has no reload command
38
+ return false unless running?
39
+ actual_reload
40
+ end
41
+
42
+ def version
43
+ Bundler.with_clean_env do
44
+ `fluentd --version`.strip
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def options_to_argv
51
+ argv = ""
52
+ argv << " --use-v1-config"
53
+ argv << " -c #{config_file}"
54
+ argv << " -d #{pid_file}"
55
+ argv << " -o #{log_file}"
56
+ argv
57
+ end
58
+
59
+ def validate_fluentd_options
60
+ Bundler.with_clean_env do
61
+ system("fluentd --dry-run #{options_to_argv}")
62
+ end
63
+ end
64
+
65
+ def actual_start
66
+ return unless validate_fluentd_options
67
+ Bundler.with_clean_env do
68
+ spawn("fluentd #{options_to_argv}")
69
+ end
70
+ wait_starting
71
+ end
72
+
73
+ def actual_stop
74
+ if Process.kill(:TERM, pid)
75
+ File.unlink(pid_file)
76
+ true
77
+ end
78
+ end
79
+
80
+ def actual_reload
81
+ Process.kill(:HUP, pid)
82
+ end
83
+
84
+ def wait_starting
85
+ begin
86
+ timeout(wait_process_starting_seconds) do
87
+ loop do
88
+ break if pid && Process.kill(0, pid)
89
+ sleep 0.01
90
+ end
91
+ end
92
+ true
93
+ rescue Errno::ESRCH
94
+ # successful to create pidfile, but process not exists.
95
+ # any error occured at booting process that after create pidfile. such as readling config, loading plugins, etc
96
+ # https://github.com/fluent/fluentd/blob/master/lib/fluent/supervisor.rb#L106
97
+ false
98
+ rescue TimeoutError
99
+ false
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end