fluentd-ui 0.4.5 → 1.0.0.alpha.1
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.
- checksums.yaml +5 -5
- data/.babelrc +18 -0
- data/.editorconfig +11 -0
- data/.gitignore +7 -0
- data/.postcssrc.yml +3 -0
- data/.travis.yml +20 -4
- data/ChangeLog.md +7 -2
- data/Gemfile +8 -6
- data/Gemfile.lock +177 -178
- data/README.md +15 -10
- data/app/assets/stylesheets/application.css +6 -5
- data/app/controllers/concerns/setting_history_concern.rb +1 -1
- data/app/controllers/fluentd/agents_controller.rb +5 -0
- data/app/controllers/misc_controller.rb +2 -2
- data/app/controllers/plugins_controller.rb +4 -4
- data/app/helpers/application_helper.rb +8 -2
- data/app/helpers/settings_helper.rb +2 -2
- data/app/javascript/packs/application.js +31 -0
- data/app/{assets/javascripts/codemirror_fluentd.js → javascript/packs/codemirror.js} +32 -1
- data/app/javascript/packs/fluent_log.js +63 -0
- data/app/javascript/packs/in_tail_format.js +174 -0
- data/app/javascript/packs/nested_settings.js +40 -0
- data/app/javascript/packs/notification.js +60 -0
- data/app/javascript/packs/settings.js +122 -0
- data/app/javascript/packs/treeview.js +99 -0
- data/{vendor/assets/javascripts/.keep → app/javascript/stylesheets/application.scss} +0 -0
- data/app/jobs/all_plugin_check_update_job.rb +10 -0
- data/app/jobs/application_job.rb +2 -0
- data/app/{workers/fluentd_ui_restart.rb → jobs/fluentd_ui_restart_job.rb} +4 -4
- data/app/jobs/fluentd_ui_update_check_job.rb +11 -0
- data/app/{workers/gem_installer.rb → jobs/gem_installer_job.rb} +4 -5
- data/app/jobs/gem_uninstaller_job.rb +14 -0
- data/app/jobs/gem_update_check_job.rb +9 -0
- data/app/models/fluentd/agent.rb +9 -5
- data/app/models/fluentd/agent/common.rb +10 -6
- data/app/models/fluentd/agent/fluentd_gem.rb +2 -3
- data/app/models/fluentd/agent/td_agent/unix.rb +7 -5
- data/app/models/fluentd/setting/in_tail.rb +2 -2
- data/app/views/fluentd/_form.html.haml +1 -1
- data/app/views/fluentd/errors.html.haml +5 -6
- data/app/views/fluentd/log.html.haml +4 -5
- data/app/views/fluentd/settings/edit.html.haml +2 -1
- data/app/views/fluentd/settings/histories/_list.html.haml +1 -1
- data/app/views/fluentd/settings/histories/show.html.haml +6 -6
- data/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +4 -3
- data/app/views/fluentd/settings/in_tail/after_format.html.haml +2 -2
- data/app/views/fluentd/settings/in_tail/confirm.html.haml +3 -3
- data/app/views/fluentd/settings/running_backup/show.html.haml +5 -5
- data/app/views/fluentd/settings/show.html.haml +7 -7
- data/app/views/fluentd/settings/source_and_output.html.haml +31 -18
- data/app/views/fluentd/show.html.haml +16 -15
- data/app/views/layouts/application.html.erb +31 -46
- data/app/views/layouts/sign_in.html.erb +9 -16
- data/app/views/misc/information.html.haml +13 -13
- data/app/views/misc/update_fluentd_ui.html.haml +3 -3
- data/app/views/plugins/installed.html.haml +8 -8
- data/app/views/plugins/recommended.html.haml +5 -5
- data/app/views/plugins/updated.html.haml +5 -5
- data/app/views/sessions/new.html.haml +5 -6
- data/app/views/shared/_global_nav.html.erb +9 -9
- data/app/views/shared/_initial_setup.html.haml +3 -3
- data/app/views/shared/_modal.html.erb +1 -1
- data/app/views/shared/settings/_form.html.haml +9 -8
- data/app/views/shared/settings/show.html.haml +4 -2
- data/app/views/shared/vue/_fluent_log.html.erb +6 -6
- data/app/views/shared/vue/_in_tail_format.html.erb +31 -29
- data/app/views/shared/vue/_notification.html.erb +5 -9
- data/app/views/shared/vue/_setting.html.erb +12 -10
- data/app/views/shared/vue/_treeview.html.erb +13 -10
- data/app/views/tutorials/chapter1.html.erb +3 -4
- data/app/views/tutorials/chapter2.html.haml +2 -2
- data/app/views/tutorials/chapter3.html.haml +2 -2
- data/app/views/tutorials/chapter4.html.haml +2 -2
- data/app/views/users/show.html.haml +1 -1
- data/bin/bundle +1 -1
- data/bin/fluentd-ui +1 -0
- data/bin/rails +1 -1
- data/bin/setup +16 -17
- data/bin/update +28 -0
- data/bin/webpack +15 -0
- data/bin/webpack-dev-server +15 -0
- data/bin/yarn +11 -0
- data/config/application.rb +18 -5
- data/config/boot.rb +2 -1
- data/config/environment.rb +1 -1
- data/config/environments/development.rb +27 -5
- data/config/environments/production.rb +34 -23
- data/config/environments/test.rb +7 -3
- data/config/initializers/application_controller_renderer.rb +8 -0
- data/config/initializers/assets.rb +14 -0
- data/config/initializers/content_security_policy.rb +25 -0
- data/config/initializers/cookies_serializer.rb +2 -0
- data/config/initializers/fluentd_ui_update_check.rb +2 -1
- data/config/initializers/new_framework_defaults_5_2.rb +35 -0
- data/config/initializers/prefetch_gem_updates.rb +4 -1
- data/config/initializers/wrap_parameters.rb +1 -6
- data/config/locales/ja.yml +61 -57
- data/config/routes.rb +1 -0
- data/config/spring.rb +6 -0
- data/config/webpack/development.js +5 -0
- data/config/webpack/environment.js +20 -0
- data/config/webpack/loaders/vue.js +13 -0
- data/config/webpack/production.js +5 -0
- data/config/webpack/test.js +5 -0
- data/config/webpacker.yml +69 -0
- data/fluentd-ui.gemspec +16 -6
- data/lib/fluentd-ui/version.rb +1 -1
- data/lib/regexp_preview/single_line.rb +5 -5
- data/package.json +19 -0
- data/spec/controllers/application_controller_spec.rb +2 -6
- data/spec/controllers/fluentd/agents_controller_spec.rb +12 -0
- data/spec/controllers/polling_controller_spec.rb +1 -1
- data/spec/factories/fluentd.rb +1 -1
- data/spec/factories/plugins.rb +2 -2
- data/spec/factories/user.rb +1 -1
- data/spec/features/fluentd/setting/histories_spec.rb +7 -6
- data/spec/features/fluentd/setting/running_backup_spec.rb +4 -3
- data/spec/features/setting_spec.rb +1 -0
- data/spec/features/source_and_output_spec.rb +16 -16
- data/spec/lib/regexp_preview/single_line_spec.rb +1 -1
- data/spec/models/fluentd_spec.rb +4 -4
- data/spec/spec_helper.rb +16 -4
- data/yarn.lock +6225 -0
- metadata +120 -154
- data/.bowerrc +0 -3
- data/app/assets/javascripts/application.js +0 -24
- data/app/assets/javascripts/codemirror.js +0 -29
- data/app/assets/javascripts/enable_bootstrap_tooltip.js +0 -3
- data/app/assets/javascripts/nested_setting.js +0 -41
- data/app/assets/javascripts/vue/fluent_log.js +0 -64
- data/app/assets/javascripts/vue/in_tail_format.js +0 -177
- data/app/assets/javascripts/vue/notification.js +0 -65
- data/app/assets/javascripts/vue/settings.js +0 -121
- data/app/assets/javascripts/vue/treeview.js +0 -97
- data/app/assets/javascripts/vue_common.js +0 -4
- data/app/workers/all_plugin_check_update.rb +0 -14
- data/app/workers/fluentd_ui_update_check.rb +0 -15
- data/app/workers/gem_uninstaller.rb +0 -15
- data/app/workers/gem_update_check.rb +0 -10
- data/bower.json +0 -11
- data/vendor/assets/javascripts/bower/.gitignore +0 -10
- data/vendor/assets/javascripts/bower/codemirror/.bower.json +0 -29
- data/vendor/assets/javascripts/bower/codemirror/bower.json +0 -16
- data/vendor/assets/javascripts/bower/codemirror/lib/codemirror.css +0 -309
- data/vendor/assets/javascripts/bower/codemirror/lib/codemirror.js +0 -8029
- data/vendor/assets/javascripts/bower/codemirror/theme/3024-day.css +0 -38
- data/vendor/assets/javascripts/bower/codemirror/theme/3024-night.css +0 -37
- data/vendor/assets/javascripts/bower/codemirror/theme/ambiance-mobile.css +0 -5
- data/vendor/assets/javascripts/bower/codemirror/theme/ambiance.css +0 -77
- data/vendor/assets/javascripts/bower/codemirror/theme/base16-dark.css +0 -36
- data/vendor/assets/javascripts/bower/codemirror/theme/base16-light.css +0 -36
- data/vendor/assets/javascripts/bower/codemirror/theme/blackboard.css +0 -30
- data/vendor/assets/javascripts/bower/codemirror/theme/cobalt.css +0 -23
- data/vendor/assets/javascripts/bower/codemirror/theme/eclipse.css +0 -23
- data/vendor/assets/javascripts/bower/codemirror/theme/elegant.css +0 -13
- data/vendor/assets/javascripts/bower/codemirror/theme/erlang-dark.css +0 -32
- data/vendor/assets/javascripts/bower/codemirror/theme/lesser-dark.css +0 -45
- data/vendor/assets/javascripts/bower/codemirror/theme/mbo.css +0 -35
- data/vendor/assets/javascripts/bower/codemirror/theme/mdn-like.css +0 -44
- data/vendor/assets/javascripts/bower/codemirror/theme/midnight.css +0 -45
- data/vendor/assets/javascripts/bower/codemirror/theme/monokai.css +0 -31
- data/vendor/assets/javascripts/bower/codemirror/theme/neat.css +0 -12
- data/vendor/assets/javascripts/bower/codemirror/theme/neo.css +0 -43
- data/vendor/assets/javascripts/bower/codemirror/theme/night.css +0 -26
- data/vendor/assets/javascripts/bower/codemirror/theme/paraiso-dark.css +0 -36
- data/vendor/assets/javascripts/bower/codemirror/theme/paraiso-light.css +0 -36
- data/vendor/assets/javascripts/bower/codemirror/theme/pastel-on-dark.css +0 -50
- data/vendor/assets/javascripts/bower/codemirror/theme/rubyblue.css +0 -23
- data/vendor/assets/javascripts/bower/codemirror/theme/solarized.css +0 -165
- data/vendor/assets/javascripts/bower/codemirror/theme/the-matrix.css +0 -28
- data/vendor/assets/javascripts/bower/codemirror/theme/tomorrow-night-bright.css +0 -35
- data/vendor/assets/javascripts/bower/codemirror/theme/tomorrow-night-eighties.css +0 -36
- data/vendor/assets/javascripts/bower/codemirror/theme/twilight.css +0 -30
- data/vendor/assets/javascripts/bower/codemirror/theme/vibrant-ink.css +0 -32
- data/vendor/assets/javascripts/bower/codemirror/theme/xq-dark.css +0 -51
- data/vendor/assets/javascripts/bower/codemirror/theme/xq-light.css +0 -43
- data/vendor/assets/javascripts/bower/codemirror/theme/zenburn.css +0 -37
- data/vendor/assets/javascripts/bower/es6-promise/.bower.json +0 -15
- data/vendor/assets/javascripts/bower/es6-promise/bower.json +0 -5
- data/vendor/assets/javascripts/bower/es6-promise/promise.js +0 -684
- data/vendor/assets/javascripts/bower/es6-promise/promise.min.js +0 -1
- data/vendor/assets/javascripts/bower/lodash/.bower.json +0 -33
- data/vendor/assets/javascripts/bower/lodash/LICENSE.txt +0 -22
- data/vendor/assets/javascripts/bower/lodash/bower.json +0 -23
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.js +0 -7157
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.min.js +0 -61
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.js +0 -6785
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.min.js +0 -56
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.js +0 -4979
- data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.min.js +0 -39
- data/vendor/assets/javascripts/bower/vue/.bower.json +0 -29
- data/vendor/assets/javascripts/bower/vue/bower.json +0 -17
- data/vendor/assets/javascripts/bower/vue/dist/vue.js +0 -7977
- data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +0 -7
- data/vendor/assets/javascripts/sb-admin-v2/bootstrap.js +0 -1951
- data/vendor/assets/javascripts/sb-admin-v2/bootstrap.min.js +0 -6
- data/vendor/assets/javascripts/sb-admin-v2/demo/dashboard-demo.js +0 -117
- data/vendor/assets/javascripts/sb-admin-v2/demo/flot-demo.js +0 -1242
- data/vendor/assets/javascripts/sb-admin-v2/demo/morris-demo.js +0 -155
- data/vendor/assets/javascripts/sb-admin-v2/jquery-1.10.2.js +0 -6
- data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.js +0 -245
- data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/jquery.dataTables.js +0 -14013
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/excanvas.min.js +0 -1
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.js +0 -2599
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.pie.js +0 -750
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.resize.js +0 -60
- data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.tooltip.min.js +0 -12
- data/vendor/assets/javascripts/sb-admin-v2/plugins/metisMenu/jquery.metisMenu.js +0 -45
- data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/morris.js +0 -1888
- data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/raphael-2.1.0.min.js +0 -10
- data/vendor/assets/javascripts/sb-admin-v2/sb-admin.js +0 -18
- data/vendor/assets/stylesheets/.keep +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.css +0 -5830
- data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.min.css +0 -7
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.css +0 -1338
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.min.css +0 -4
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/FontAwesome.otf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.svg +0 -414
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_bordered-pulled.scss +0 -16
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_core.scss +0 -12
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_fixed-width.scss +0 -6
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_icons.scss +0 -412
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_larger.scss +0 -13
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_list.scss +0 -19
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_mixins.scss +0 -20
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_path.scss +0 -14
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_rotated-flipped.scss +0 -9
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_spinning.scss +0 -30
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_stacked.scss +0 -20
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_variables.scss +0 -381
- data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/font-awesome.scss +0 -17
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.svg +0 -229
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.css +0 -233
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/morris/morris-0.4.3.min.css +0 -2
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/social-buttons/social-buttons.css +0 -68
- data/vendor/assets/stylesheets/sb-admin-v2/plugins/timeline/timeline.css +0 -144
- data/vendor/assets/stylesheets/sb-admin-v2/sb-admin.css +0 -329
data/README.md
CHANGED
@@ -16,8 +16,8 @@ fluentd-ui is a browser-based [fluentd](http://www.fluentd.org) and [td-agent](h
|
|
16
16
|
|
17
17
|
## Requirements
|
18
18
|
|
19
|
-
- ruby 2.
|
20
|
-
- fluentd
|
19
|
+
- ruby 2.2.2 or later (since v1.0.0)
|
20
|
+
- fluentd v1.0.0 or later
|
21
21
|
|
22
22
|
Currently, fluentd-ui doesn't support fleuntd v1 and td-agent 3.
|
23
23
|
And some additional packages (Debian / Ubuntu)
|
@@ -33,20 +33,25 @@ And some additional packages (Debian / Ubuntu)
|
|
33
33
|
$ git clone https://github.com/fluent/fluentd-ui
|
34
34
|
$ cd fluentd-ui
|
35
35
|
$ bundle install
|
36
|
-
$
|
36
|
+
$ bin/rails s
|
37
37
|
|
38
|
-
Also you need a
|
38
|
+
Also you need a [chromedriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) or chromiumdriver for test.
|
39
39
|
|
40
|
-
$ npm install -g
|
40
|
+
$ npm install -g chromedriver
|
41
41
|
Or,
|
42
|
-
$ brew install
|
42
|
+
$ brew install chromedriver
|
43
|
+
Or,
|
44
|
+
$ sudo apt install chromium-driver
|
43
45
|
|
44
|
-
NOTE: `
|
46
|
+
NOTE: `chromedriver` executable binary should be located under your `$PATH`.
|
45
47
|
|
46
48
|
## Building fluentd-ui.gem
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
+
# Generate pre-compiled assets
|
51
|
+
$ RAILS_ENV=production bin/rails assets:precompile
|
52
|
+
|
53
|
+
# fluentd-ui X.X.X built to pkg/fluentd-ui-X.X.X.gem.
|
54
|
+
$ RAILS_ENV=production bin/rails build
|
50
55
|
|
51
|
-
$ bundle exec rake release
|
52
56
|
# Push to rubygems.org
|
57
|
+
$ bin/rails release
|
@@ -10,11 +10,12 @@
|
|
10
10
|
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
11
|
* file per style scope.
|
12
12
|
*
|
13
|
-
*= require
|
14
|
-
*= require
|
15
|
-
*= require
|
16
|
-
*= require
|
17
|
-
*= require
|
13
|
+
*= require font-awesome
|
14
|
+
*= require bootstrap/dist/css/bootstrap
|
15
|
+
*= require startbootstrap-sb-admin/css/sb-admin.css
|
16
|
+
*= require datatables.net-bs4/css/dataTables.bootstrap4.css
|
17
|
+
*= require codemirror/lib/codemirror
|
18
|
+
*= require codemirror/theme/neo
|
18
19
|
*= require_tree .
|
19
20
|
*= require_self
|
20
21
|
*/
|
@@ -16,6 +16,11 @@ class Fluentd::AgentsController < ApplicationController
|
|
16
16
|
redirect_to daemon_path(@fluentd), status: 303 # 303 is change HTTP Verb GET
|
17
17
|
end
|
18
18
|
|
19
|
+
def reload
|
20
|
+
run_action(__method__) { @fluentd.agent.log.tail(1).first }
|
21
|
+
redirect_to daemon_path(@fluentd), status: 303 # 303 is change HTTP Verb GET
|
22
|
+
end
|
23
|
+
|
19
24
|
def log_tail
|
20
25
|
@logs = @fluentd.agent.log.tail(params[:limit]).reverse if @fluentd
|
21
26
|
render json: @logs
|
@@ -19,7 +19,7 @@ class MiscController < ApplicationController
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def upgrading_status
|
22
|
-
if
|
22
|
+
if FluentdUiRestartJob::LOCK.present?
|
23
23
|
return render text: "updating"
|
24
24
|
end
|
25
25
|
|
@@ -73,6 +73,6 @@ class MiscController < ApplicationController
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def update!
|
76
|
-
FluentdUiRestart.
|
76
|
+
FluentdUiRestart.perform_later
|
77
77
|
end
|
78
78
|
end
|
@@ -17,27 +17,27 @@ class PluginsController < ApplicationController
|
|
17
17
|
|
18
18
|
def install
|
19
19
|
params[:plugins].each do |gem_name|
|
20
|
-
|
20
|
+
GemInstallerJob.perform_later(gem_name)
|
21
21
|
end
|
22
22
|
redirect_to plugins_path
|
23
23
|
end
|
24
24
|
|
25
25
|
def uninstall
|
26
26
|
params[:plugins].each do |gem_name|
|
27
|
-
|
27
|
+
GemUninstallerJob.perform_later(gem_name)
|
28
28
|
end
|
29
29
|
redirect_to plugins_path
|
30
30
|
end
|
31
31
|
|
32
32
|
def upgrade
|
33
|
-
|
33
|
+
GemInstallerJob.perform_later(params[:plugins][:name], params[:plugins][:version])
|
34
34
|
redirect_to plugins_path
|
35
35
|
end
|
36
36
|
|
37
37
|
def bulk_upgrade
|
38
38
|
params[:plugins].each do |gem_name|
|
39
39
|
pl = Plugin.new(gem_name: gem_name)
|
40
|
-
|
40
|
+
GemInstallerJob.perform_later(gem_name, pl.latest_version)
|
41
41
|
end
|
42
42
|
redirect_to plugins_path
|
43
43
|
end
|
@@ -37,12 +37,12 @@ module ApplicationHelper
|
|
37
37
|
raw html
|
38
38
|
end
|
39
39
|
|
40
|
-
def link_to_other(text, path)
|
40
|
+
def link_to_other(text, path, **options)
|
41
41
|
if current_page?(path)
|
42
42
|
# 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.
|
43
43
|
content_tag(:a, text, class: "current")
|
44
44
|
else
|
45
|
-
link_to text, path
|
45
|
+
link_to text, path, class: "nav-link"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -62,4 +62,10 @@ module ApplicationHelper
|
|
62
62
|
head.html_safe + block.try(:call).to_s
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
def add_javascript_pack_tag(name, **options)
|
67
|
+
content_for(:additional_javascript_pack_tag) do
|
68
|
+
javascript_pack_tag(name, **options)
|
69
|
+
end
|
70
|
+
end
|
65
71
|
end
|
@@ -54,8 +54,8 @@ module SettingsHelper
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def append_and_remove_links
|
57
|
-
%Q!<a class="btn btn-
|
58
|
-
%Q!<a class="btn btn-
|
57
|
+
%Q!<a class="btn btn-sm btn-outline-secondary js-append">#{icon('fa-plus')}</a> ! +
|
58
|
+
%Q!<a class="btn btn-sm btn-outline-secondary js-remove" style="display:none">#{icon('fa-minus')}</a> !
|
59
59
|
end
|
60
60
|
|
61
61
|
def child_data(form, key)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/* eslint no-console:0 */
|
2
|
+
// This file is automatically compiled by Webpack, along with any other files
|
3
|
+
// present in this directory. You're encouraged to place your actual application logic in
|
4
|
+
// a relevant structure within app/javascript and only use these pack files to reference
|
5
|
+
// that code so it'll be compiled.
|
6
|
+
//
|
7
|
+
// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
|
8
|
+
// layout file, like app/views/layouts/application.html.erb
|
9
|
+
|
10
|
+
console.log('Hello World from Webpacker')
|
11
|
+
|
12
|
+
import jQuery from 'jquery/dist/jquery'
|
13
|
+
|
14
|
+
window.$ = jQuery
|
15
|
+
window.jQuery = jQuery
|
16
|
+
|
17
|
+
import 'popper.js/dist/popper'
|
18
|
+
import 'bootstrap/dist/js/bootstrap'
|
19
|
+
import 'datatables.net/js/jquery.dataTables'
|
20
|
+
import 'startbootstrap-sb-admin/js/sb-admin'
|
21
|
+
import 'startbootstrap-sb-admin/js/sb-admin-datatables'
|
22
|
+
|
23
|
+
import Vue from 'vue/dist/vue.esm'
|
24
|
+
|
25
|
+
Vue.filter('to_json', function (value) {
|
26
|
+
return JSON.stringify(value);
|
27
|
+
})
|
28
|
+
|
29
|
+
window.Vue = Vue
|
30
|
+
|
31
|
+
import '../stylesheets/application.scss'
|
@@ -1,7 +1,9 @@
|
|
1
|
+
import CodeMirror from 'codemirror/lib/codemirror'
|
2
|
+
import 'lodash/lodash'
|
3
|
+
|
1
4
|
// See: http://codemirror.net/doc/manual.html#modeapi
|
2
5
|
// and sample mode files: https://github.com/codemirror/CodeMirror/tree/master/mode
|
3
6
|
|
4
|
-
|
5
7
|
CodeMirror.defineMode('fluentd', function(){
|
6
8
|
return {
|
7
9
|
startState: function(aa){
|
@@ -57,3 +59,32 @@ CodeMirror.defineMode('fluentd', function(){
|
|
57
59
|
}
|
58
60
|
};
|
59
61
|
});
|
62
|
+
|
63
|
+
function codemirrorify(el) {
|
64
|
+
return CodeMirror.fromTextArea(el, {
|
65
|
+
theme: "neo",
|
66
|
+
lineNumbers: true,
|
67
|
+
viewportMargin: Infinity,
|
68
|
+
mode: "fluentd"
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
$(function(){
|
73
|
+
$('.js-fluentd-config-editor').each(function(_, el){
|
74
|
+
codemirrorify(el);
|
75
|
+
});
|
76
|
+
});
|
77
|
+
|
78
|
+
Vue.directive('config-editor', {
|
79
|
+
bind: function(el, binding, vnode, oldVnode){
|
80
|
+
// NOTE: needed delay for waiting CodeMirror setup
|
81
|
+
_.delay(function(textarea){
|
82
|
+
let cm = codemirrorify(textarea);
|
83
|
+
// textarea.codemirror = cm; // for test, but doesn't work for now (working on Chrome, but Poltergeist not)
|
84
|
+
cm.on('change', function(code_mirror){
|
85
|
+
// bridge Vue - CodeMirror world
|
86
|
+
el.dataset.content = code_mirror.getValue();
|
87
|
+
});
|
88
|
+
}, 0, el);
|
89
|
+
}
|
90
|
+
});
|
@@ -0,0 +1,63 @@
|
|
1
|
+
'use strict';
|
2
|
+
$(document).ready(()=> {
|
3
|
+
new Vue({
|
4
|
+
el: "#fluent-log",
|
5
|
+
props: ["logUrl", "initialAutoReload"],
|
6
|
+
data: {
|
7
|
+
"autoFetch": false,
|
8
|
+
"logs": [],
|
9
|
+
"limit": 30,
|
10
|
+
"processing": false
|
11
|
+
},
|
12
|
+
|
13
|
+
beforeMount: function() {
|
14
|
+
this.logUrl = this.$el.attributes.logUrl.nodeValue;
|
15
|
+
this.initialAutoReload = this.$el.attributes.initialAutoReload.nodeValue;
|
16
|
+
},
|
17
|
+
|
18
|
+
mounted: function(){
|
19
|
+
this.fetchLogs();
|
20
|
+
|
21
|
+
var self = this;
|
22
|
+
var timer;
|
23
|
+
this.$watch("autoFetch", function(newValue){
|
24
|
+
if(newValue === true) {
|
25
|
+
timer = setInterval(function(){
|
26
|
+
self.fetchLogs();
|
27
|
+
var $log = $(".log", self.$el);
|
28
|
+
$log.scrollTop($log.innerHeight());
|
29
|
+
}, 1000);
|
30
|
+
} else {
|
31
|
+
clearInterval(timer);
|
32
|
+
}
|
33
|
+
});
|
34
|
+
if(this.initialAutoReload) {
|
35
|
+
this.autoFetch = true;
|
36
|
+
}
|
37
|
+
},
|
38
|
+
|
39
|
+
computed: {
|
40
|
+
isPresentedLogs: function(){
|
41
|
+
return this.logs.length > 0;
|
42
|
+
}
|
43
|
+
},
|
44
|
+
|
45
|
+
methods: {
|
46
|
+
fetchLogs: function() {
|
47
|
+
if(this.processing) return;
|
48
|
+
this.processing = true;
|
49
|
+
var self = this;
|
50
|
+
new Promise(function(resolve, reject) {
|
51
|
+
$.getJSON(self.logUrl + "?limit=" + self.limit, resolve).fail(reject);
|
52
|
+
}).then(function(logs){
|
53
|
+
self.logs = logs;
|
54
|
+
setTimeout(function(){
|
55
|
+
self.processing = false;
|
56
|
+
}, 256); // delay to reduce flicking loading icon
|
57
|
+
})["catch"](function(error){
|
58
|
+
self.processing = false;
|
59
|
+
});
|
60
|
+
}
|
61
|
+
}
|
62
|
+
});
|
63
|
+
});
|
@@ -0,0 +1,174 @@
|
|
1
|
+
'use strict'
|
2
|
+
import 'lodash/lodash'
|
3
|
+
|
4
|
+
window.addEventListener('load', () => {
|
5
|
+
const maxFormatCount = 20;
|
6
|
+
|
7
|
+
new Vue({
|
8
|
+
el: "#in_tail_format",
|
9
|
+
props: ["formatOptionsJson", "initialSelected", "targetFile", "paramsJson"],
|
10
|
+
data: {
|
11
|
+
previewProcessing: false,
|
12
|
+
format: "",
|
13
|
+
highlightedLines: null,
|
14
|
+
},
|
15
|
+
|
16
|
+
computed: {
|
17
|
+
options: {
|
18
|
+
get: function(){
|
19
|
+
return this.formatOptions[this.format];
|
20
|
+
},
|
21
|
+
},
|
22
|
+
selectableFormats: {
|
23
|
+
get: function() {
|
24
|
+
return Object.keys(this.formatOptions);
|
25
|
+
}
|
26
|
+
},
|
27
|
+
useTextArea: function() {
|
28
|
+
return this.format === "multiline";
|
29
|
+
}
|
30
|
+
},
|
31
|
+
|
32
|
+
beforeMount: function() {
|
33
|
+
this.formatOptions = JSON.parse(this.$el.attributes.formatOptionsJson.nodeValue);
|
34
|
+
this.format = this.$el.attributes.initialSelected.nodeValue;
|
35
|
+
|
36
|
+
// initialize params
|
37
|
+
// NOTE: if `params.setting.foo` is undefined, Vue can't binding with v-model="params.setting.foo"
|
38
|
+
var params = JSON.parse(this.$el.attributes.paramsJson.nodeValue);
|
39
|
+
if(!params.setting) {
|
40
|
+
params.setting = {};
|
41
|
+
}
|
42
|
+
|
43
|
+
var formats = _.chain(_.range(1, maxFormatCount + 1)).map(function(i) {return params.setting["format" + String(i)];}).compact().value();
|
44
|
+
params.setting.formats = formats.join("\n");
|
45
|
+
|
46
|
+
_.each(this.formatOptions, function(options){
|
47
|
+
_.each(options, function(key){
|
48
|
+
if(!params.setting.hasOwnProperty(key)){
|
49
|
+
params.setting[key] = "";
|
50
|
+
}
|
51
|
+
});
|
52
|
+
});
|
53
|
+
this.params = params;
|
54
|
+
|
55
|
+
this.targetFile = this.$el.attributes.targetFile.nodeValue;
|
56
|
+
},
|
57
|
+
mounted: function(){
|
58
|
+
this.$emit("data-loaded");
|
59
|
+
},
|
60
|
+
|
61
|
+
watch: {
|
62
|
+
'params.setting.formats': function(formats) {
|
63
|
+
_.range(1, maxFormatCount + 1).forEach(()=> {params.setting["format" + String(i)] = "";});
|
64
|
+
|
65
|
+
_.compact(formats.split("\n")).forEach((formatLine, index)=> {
|
66
|
+
params.setting["format" + String(index + 1)] = formatLine;
|
67
|
+
})
|
68
|
+
},
|
69
|
+
'params.setting.regexp': function() {
|
70
|
+
this.preview();
|
71
|
+
},
|
72
|
+
'format': function() {
|
73
|
+
this.preview();
|
74
|
+
},
|
75
|
+
},
|
76
|
+
|
77
|
+
methods: {
|
78
|
+
onKeyup: function(ev){
|
79
|
+
var el = ev.target;
|
80
|
+
if(el.name.match(/\[format/)){
|
81
|
+
this.preview();
|
82
|
+
}
|
83
|
+
},
|
84
|
+
updateHighlightedLines: function() {
|
85
|
+
if(!this.regexpMatches) {
|
86
|
+
this.highlightedLines = null;
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
|
90
|
+
var $container = jQuery('<div>');
|
91
|
+
_.each(this.regexpMatches, function(match){
|
92
|
+
var colors = [
|
93
|
+
"#ff9", "#cff", "#fcf", "#dfd"
|
94
|
+
];
|
95
|
+
var whole = match.whole;
|
96
|
+
var html = "";
|
97
|
+
var matches = [];
|
98
|
+
|
99
|
+
var lastPos = 0;
|
100
|
+
_.each(match.matches, function(match) {
|
101
|
+
var matched = match.matched;
|
102
|
+
if(!matched) return;
|
103
|
+
if(matched.length === 0) return; // Ignore empty matched with "foobar".match(/foo(.*?)bar/)[1] #=> ""
|
104
|
+
|
105
|
+
// rotated highlight color
|
106
|
+
var currentColor = colors.shift();
|
107
|
+
colors.push(currentColor);
|
108
|
+
|
109
|
+
// create highlighted range HTML
|
110
|
+
var $highlighted = jQuery('<span>').text(matched);
|
111
|
+
$highlighted.attr({
|
112
|
+
"class": "regexp-preview",
|
113
|
+
"data-toggle": "tooltip",
|
114
|
+
"data-placement": "top",
|
115
|
+
"title": match.key,
|
116
|
+
'style': 'background-color:' + currentColor
|
117
|
+
});
|
118
|
+
var highlightedHtml = $highlighted.wrap('<div>').parent().html();
|
119
|
+
|
120
|
+
var pos = {
|
121
|
+
"start": match.pos[0],
|
122
|
+
"end": match.pos[1]
|
123
|
+
};
|
124
|
+
if(pos.start > 0) {
|
125
|
+
html += _.escape(whole.substring(lastPos, pos.start));
|
126
|
+
}
|
127
|
+
html += highlightedHtml;
|
128
|
+
lastPos = pos.end;
|
129
|
+
});
|
130
|
+
html += whole.substring(lastPos);
|
131
|
+
|
132
|
+
$container.append(html);
|
133
|
+
$container.append("<br />");
|
134
|
+
});
|
135
|
+
|
136
|
+
this.highlightedLines = $container.html();
|
137
|
+
},
|
138
|
+
|
139
|
+
preview: function(){
|
140
|
+
if(this.previewAjax) {
|
141
|
+
this.previewAjax.abort();
|
142
|
+
}
|
143
|
+
|
144
|
+
const token = document.getElementsByName("csrf-token")[0].getAttribute('content')
|
145
|
+
|
146
|
+
var self = this;
|
147
|
+
new Promise(function(resolve, reject) {
|
148
|
+
self.previewAjax = $.ajax({
|
149
|
+
method: "POST",
|
150
|
+
url: "/api/regexp_preview",
|
151
|
+
headers: {
|
152
|
+
'X-CSRF-Token': token
|
153
|
+
},
|
154
|
+
data: {
|
155
|
+
regexp: self.params.setting.regexp,
|
156
|
+
time_format: self.params.setting.time_format,
|
157
|
+
format: _.isEmpty(self.format) ? "regexp" : self.format,
|
158
|
+
params: self.params.setting,
|
159
|
+
file: self.targetFile
|
160
|
+
}
|
161
|
+
}).done(resolve).fail(reject);
|
162
|
+
}).then(function(result){
|
163
|
+
self.params = _.merge(self.params, result.params);
|
164
|
+
self.regexpMatches = result.matches;
|
165
|
+
self.updateHighlightedLines();
|
166
|
+
})["catch"](function(error){
|
167
|
+
if(error.stack) {
|
168
|
+
console.error(error.stack);
|
169
|
+
}
|
170
|
+
});
|
171
|
+
},
|
172
|
+
}
|
173
|
+
});
|
174
|
+
});
|