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,70 @@
1
+ class Fluentd
2
+ module Setting
3
+ class OutForward
4
+ class Server
5
+ include Common
6
+ KEYS = [
7
+ :name, :host, :port, :weight, :standby
8
+ ].freeze
9
+
10
+ attr_accessor(*KEYS)
11
+
12
+ flags :standby
13
+
14
+ validates :host, presence: true
15
+ validates :port, presence: true
16
+ end
17
+
18
+ class Secondary
19
+ include Common
20
+ KEYS = [
21
+ :type, :path
22
+ ].freeze
23
+
24
+ attr_accessor(*KEYS)
25
+
26
+ hidden :type
27
+ validates :path, presence: true
28
+ end
29
+
30
+ include Common
31
+
32
+ KEYS = [
33
+ :match,
34
+ :send_timeout, :recover_wait, :heartbeat_type, :heartbeat_interval,
35
+ :phi_threshold, :hard_timeout,
36
+ :server, :secondary
37
+ ].freeze
38
+
39
+ attr_accessor(*KEYS)
40
+ choice :heartbeat_type, %w(udp tcp)
41
+ nested :server, Server, multiple: true
42
+ nested :secondary, Secondary
43
+
44
+ validates :match, presence: true
45
+ validate :validate_has_at_least_one_server
46
+ validate :validate_nested_values
47
+
48
+ def validate_has_at_least_one_server
49
+ if children_of(:server).reject{|s| s.empty_value? }.blank?
50
+ errors.add(:base, :out_forward_blank_server)
51
+ end
52
+ end
53
+
54
+ def validate_nested_values
55
+ self.class.children.inject(true) do |result, (key, _)|
56
+ children_of(key).each do |child|
57
+ if !child.empty_value? && !child.valid?
58
+ child.errors.full_messages.each do |message|
59
+ errors.add(:base, "(#{key})#{message}")
60
+ end
61
+ result = false
62
+ end
63
+ result
64
+ end
65
+ result
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,35 @@
1
+ class Fluentd
2
+ module Setting
3
+ class OutMongo
4
+ include Common
5
+
6
+ KEYS = [
7
+ :match,
8
+ :host, :port, :database, :collection, :capped, :capped_size, :capped_max, :user, :password, :tag_mapped,
9
+ :buffer_type, :buffer_queue_limit, :buffer_chunk_limit, :flush_interval, :retry_wait, :retry_limit, :max_retry_wait, :num_threads,
10
+ ].freeze
11
+
12
+ attr_accessor(*KEYS)
13
+
14
+ flags :capped, :tag_mapped
15
+
16
+ validates :match, presence: true
17
+ validates :host, presence: true
18
+ validates :port, presence: true
19
+ validates :database, presence: true
20
+ validate :validate_capped
21
+ validate :validate_collection
22
+
23
+ def validate_capped
24
+ return true if capped.blank?
25
+ errors.add(:capped_size, :blank) if capped_size.blank?
26
+ end
27
+
28
+ def validate_collection
29
+ if tag_mapped.blank? && collection.blank?
30
+ errors.add(:collection, :blank)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ class Fluentd
2
+ module Setting
3
+ class OutS3
4
+ include ActiveModel::Model
5
+ include Common
6
+
7
+ KEYS = [
8
+ :match,
9
+ :aws_key_id, :aws_sec_key, :s3_bucket, :s3_endpoint, :path,
10
+ # :reduced_redundancy, :check_apikey_on_start, :command_parameter, # not configurable?
11
+ :format, :include_time_key, :time_key, :delimiter, :label_delimiter, :add_newline, :output_tag, :output_time,
12
+ :time_slice_format, :time_slice_wait, :time_format, :utc, :store_as, :proxy_uri, :use_ssl,
13
+ :buffer_type, :buffer_queue_limit, :buffer_chunk_limit, :flush_interval,
14
+ :retry_wait, :retry_limit, :max_retry_wait, :num_threads,
15
+ ].freeze
16
+
17
+ attr_accessor(*KEYS)
18
+
19
+ choice :format, %w(out_file json ltsv single_value)
20
+ choice :store_as, %w(gzip lzo lzma2 json txt)
21
+ choice :buffer_type, %w(memory file)
22
+ booleans :include_time_key, :add_newline, :use_ssl, :output_tag, :output_time
23
+ flags :utc
24
+
25
+ validates :match, presence: true
26
+ validates :s3_bucket, presence: true
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ class Fluentd
2
+ module Setting
3
+ class OutTd
4
+ include ActiveModel::Model
5
+ include Common
6
+
7
+ KEYS = [
8
+ :match,
9
+ :apikey, :auto_create_table, :database, :table,
10
+ :flush_interval, :buffer_type, :buffer_path,
11
+ ].freeze
12
+
13
+ attr_accessor(*KEYS)
14
+
15
+ flags :auto_create_table
16
+
17
+ validates :match, presence: true
18
+ validates :apikey, presence: true
19
+ validates :auto_create_table, presence: true
20
+
21
+ def plugin_name
22
+ "tdlog"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,193 @@
1
+ require "fileutils"
2
+ require "json"
3
+ require "httpclient"
4
+
5
+ class Plugin
6
+ class GemError < StandardError; end
7
+
8
+ WORKING = []
9
+
10
+ include ActiveModel::Model
11
+
12
+ attr_accessor :gem_name, :version, :category
13
+ validates :gem_name, presence: true
14
+ validates :version, presence: true
15
+
16
+ def to_param
17
+ gem_name
18
+ end
19
+
20
+ def install!
21
+ return if installed?
22
+ self.version ||= latest_version
23
+ valid? && gem_install
24
+ end
25
+
26
+ def uninstall!
27
+ return unless installed?
28
+ gem_uninstall # NOTE: not validate
29
+ end
30
+
31
+ def upgrade!(new_version)
32
+ return unless installed?
33
+
34
+ upgrade = self.class.new(gem_name: self.gem_name, version: new_version)
35
+ if self.valid? && upgrade.valid?
36
+ self.uninstall!
37
+ upgrade.install!
38
+ self.version = upgrade.version
39
+ end
40
+ end
41
+
42
+ def installed?
43
+ self.class.installed.find do |plugin|
44
+ plugin.gem_name == gem_name
45
+ end
46
+ end
47
+
48
+ def processing?
49
+ !!WORKING.find{|data| data[:plugin].gem_name == gem_name}
50
+ end
51
+
52
+ def installed_version
53
+ return unless inst = installed?
54
+ inst.version
55
+ end
56
+
57
+ def latest_version?
58
+ installed_version == latest_version
59
+ end
60
+
61
+ def latest_version
62
+ @latest_version ||= JSON.parse(gem_versions).map {|ver| Gem::Version.new ver["number"] }.max.to_s
63
+ end
64
+
65
+ def released_versions
66
+ @released_versions ||= JSON.parse(gem_versions).map {|ver| ver["number"]}.sort_by{|ver| Gem::Version.new ver}.reverse
67
+ end
68
+
69
+ def summary
70
+ target_version = self.version || latest_version
71
+ JSON.parse(gem_versions).find {|ver| ver["number"] == target_version }.try(:[], "summary")
72
+ end
73
+
74
+ def authors
75
+ target_version = self.version || latest_version
76
+ JSON.parse(gem_versions).find {|ver| ver["number"] == target_version }.try(:[], "authors")
77
+ end
78
+
79
+ def inspect
80
+ self.version ||= latest_version
81
+ %Q|<#{gem_name}, "#{version}">|
82
+ end
83
+
84
+ def rubygems_org_page
85
+ "https://rubygems.org/gems/#{gem_name}"
86
+ end
87
+
88
+ def self.installed
89
+ Rails.cache.fetch("installed_gems", expires_in: 3.seconds) do
90
+ Bundler.with_clean_env do
91
+ gems = `#{fluent_gem_path} list`.try(:lines)
92
+ return [] unless gems
93
+ gems.grep(/fluent-plugin/).map do |gem|
94
+ name, versions_str = gem.strip.split(" ")
95
+ version = versions_str[/[^(), ]+/]
96
+ new(gem_name: name, version: version)
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ def self.recommended
103
+ Settings.recommended_plugins.map do |data|
104
+ new(category: data["category"], gem_name: "fluent-plugin-#{data["name"]}")
105
+ end
106
+ end
107
+
108
+ def self.processing
109
+ WORKING.find_all do |data|
110
+ data[:state] == :running
111
+ end
112
+ end
113
+
114
+ def self.installing
115
+ processing.find_all{|data| data[:type] == :install }.map{|data| data[:plugin] }
116
+ end
117
+
118
+ def self.uninstalling
119
+ processing.find_all{|data| data[:type] == :uninstall }.map{|data| data[:plugin] }
120
+ end
121
+
122
+ def gem_versions
123
+ Rails.cache.fetch(gem_json_url, expires_in: 60.minutes) do # NOTE: 60.minutes could be changed if it doesn't fit
124
+ gem_versions!
125
+ end
126
+ end
127
+
128
+ def gem_versions!
129
+ res = HTTPClient.get(gem_json_url)
130
+ if res.code == 200
131
+ json = res.body
132
+ Rails.cache.write(gem_json_url, json, expires_in: 60.minutes) # NOTE: 60.minutes could be changed if it doesn't fit
133
+ json
134
+ end
135
+ end
136
+
137
+ def gem_json_url
138
+ "https://rubygems.org/api/v1/versions/#{gem_name}.json"
139
+ end
140
+
141
+ def self.fluent_gem_path
142
+ # On installed both td-agent and fluentd system, decide which fluent-gem command should be used depend on setup(Fluentd.instance)
143
+ if Fluentd.instance && Fluentd.instance.fluentd?
144
+ return "fluent-gem" # maybe `fluent-gem` command is in the $PATH
145
+ end
146
+
147
+ # NOTE: td-agent has a command under the /usr/lib{,64}, td-agent2 has under /opt/td-agent
148
+ %W(
149
+ /opt/td-agent/embedded/bin/fluent-gem
150
+ /usr/lib/fluent/ruby/bin/fluent-gem
151
+ /usr/lib64/fluent/ruby/bin/fluent-gem
152
+ ).find do |path|
153
+ system("which #{path}", out: File::NULL, err: File::NULL)
154
+ end
155
+ end
156
+
157
+ private
158
+
159
+ def gem_install
160
+ data = { plugin: self, state: :running, type: :install }
161
+ return if processing?
162
+ return if installed?
163
+ WORKING.push(data)
164
+ fluent_gem("install", gem_name, "-v", version)
165
+ ensure
166
+ WORKING.delete(data)
167
+ end
168
+
169
+ def gem_uninstall
170
+ data = { plugin: self, state: :running, type: :uninstall }
171
+ return if processing?
172
+ return unless installed?
173
+ WORKING.push(data)
174
+ fluent_gem("uninstall", gem_name, "-x", "-a")
175
+ ensure
176
+ WORKING.delete(data)
177
+ end
178
+
179
+ def fluent_gem(*commands)
180
+ # NOTE: use `fluent-gem` instead of `gem`
181
+ Bundler.with_clean_env do
182
+ # NOTE: this app is under the Bundler, so call `system` in with_clean_env is Bundler jail breaking
183
+ unless system(* [fluent_gem_path, *commands])
184
+ raise GemError, "failed command #{commands.join(" ")}"
185
+ end
186
+ end
187
+ true
188
+ end
189
+
190
+ def fluent_gem_path
191
+ self.class.fluent_gem_path
192
+ end
193
+ end
@@ -0,0 +1,4 @@
1
+ class Settings < Settingslogic
2
+ source "#{Rails.root}/config/application.yml"
3
+ namespace Rails.env
4
+ end
@@ -0,0 +1,52 @@
1
+ # NOTE: Application has "admin" user only
2
+ # admin's password can be changed from browser, but user name "admin" can't be changed.
3
+ # many clients can login at the same time (App has multiple active sessions)
4
+ # raw password shouldn't be compromised (except default password)
5
+ # you may find detail at https://github.com/treasure-data/fluentd-ui/pull/34
6
+
7
+ class User
8
+ include ActiveModel::Model
9
+ include ActiveModel::SecurePassword
10
+
11
+ has_secure_password
12
+
13
+ ENCRYPTED_PASSWORD_FILE = Rails.root + "db/#{Rails.env}-user.txt"
14
+
15
+ attr_accessor :name, :password, :password_confirmation, :current_password
16
+ attr_writer :password_digest
17
+
18
+ validates :name, presence: true
19
+ validates :password, length: { minimum: 8 }
20
+ validate :valid_current_password
21
+
22
+ def password_digest
23
+ @password_digest ||
24
+ begin
25
+ hash = File.read(ENCRYPTED_PASSWORD_FILE).rstrip
26
+ BCrypt::Password.new(hash) # raise BCrypt::Errors::InvalidHash if hash is invalid
27
+ rescue Errno::ENOENT, BCrypt::Errors::InvalidHash
28
+ BCrypt::Password.create(Settings.default_password, cost: cost)
29
+ end
30
+ end
31
+
32
+ def update_attributes(params)
33
+ params.each_pair do |key, value|
34
+ send("#{key}=", value)
35
+ end
36
+ return false unless valid?
37
+
38
+ File.open(ENCRYPTED_PASSWORD_FILE, "w") do |f|
39
+ f.write BCrypt::Password.create(password, cost: cost)
40
+ end
41
+ end
42
+
43
+ def cost
44
+ Rails.env.test? ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
45
+ end
46
+
47
+ def valid_current_password
48
+ unless authenticate(current_password)
49
+ errors.add(:current_password, :wrong_password)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,31 @@
1
+ %div.col-xs-6
2
+ - @fluentd.errors.full_messages.each do |e|
3
+ %div.alert.alert-danger= e
4
+
5
+ = form_for(:fluentd, url: url, method: method) do |f|
6
+ %div.form-group
7
+ = f.label :variant
8
+ = f.hidden_field :variant
9
+ = @fluentd.variant
10
+ %div.form-group
11
+ = f.label :pid_file
12
+ - if @fluentd.td_agent?
13
+ = f.text_field :pid_file, class: "form-control", disabled: true
14
+ = f.hidden_field :pid_file
15
+ - else
16
+ = f.text_field :pid_file, class: "form-control"
17
+ %div.form-group
18
+ = f.label :log_file
19
+ - if @fluentd.td_agent?
20
+ = f.text_field :log_file, class: "form-control", disabled: true
21
+ = f.hidden_field :log_file
22
+ - else
23
+ = f.text_field :log_file, class: "form-control"
24
+ %div.form-group
25
+ = f.label :config_file
26
+ - if @fluentd.td_agent?
27
+ = f.text_field :config_file, class: "form-control", disabled: true
28
+ = f.hidden_field :config_file
29
+ - else
30
+ = f.text_field :config_file, class: "form-control"
31
+ = f.submit btn, class: "btn btn-primary"