mirror of
https://github.com/fluent/fluentd-ui.git
synced 2025-08-12 09:17:05 +02:00
Merge pull request #124 from fluent/add_memo_to_histroy
Enable to add a note with each configuration histories
This commit is contained in:
commit
c021a77d35
@ -165,3 +165,7 @@ label {
|
|||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.datetime {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
@ -5,7 +5,7 @@ class Fluentd::Settings::HistoriesController < ApplicationController
|
|||||||
|
|
||||||
def index
|
def index
|
||||||
@backup_files = @fluentd.agent.backup_files_in_new_order.map do |file_path|
|
@backup_files = @fluentd.agent.backup_files_in_new_order.map do |file_path|
|
||||||
Fluentd::Setting::BackupFile.new(file_path)
|
Fluentd::SettingArchive::BackupFile.new(file_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -21,6 +21,6 @@ class Fluentd::Settings::HistoriesController < ApplicationController
|
|||||||
|
|
||||||
def find_backup_file
|
def find_backup_file
|
||||||
#Do not use BackupFile.new(params[:id]) because params[:id] can be any path.
|
#Do not use BackupFile.new(params[:id]) because params[:id] can be any path.
|
||||||
@backup_file = Fluentd::Setting::BackupFile.find_by_file_id(@fluentd.agent.config_backup_dir, params[:id])
|
@backup_file = Fluentd::SettingArchive::BackupFile.find_by_file_id(@fluentd.agent.config_backup_dir, params[:id])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
16
app/controllers/fluentd/settings/notes_controller.rb
Normal file
16
app/controllers/fluentd/settings/notes_controller.rb
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
class Fluentd::Settings::NotesController < ApplicationController
|
||||||
|
before_action :login_required
|
||||||
|
before_action :find_fluentd
|
||||||
|
before_action :find_note, only: [:update]
|
||||||
|
|
||||||
|
def update
|
||||||
|
@note.update!(params[:note][:content])
|
||||||
|
redirect_to daemon_setting_path, flash: { success: t('messages.note_updating_success') }
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def find_note
|
||||||
|
@note = Fluentd::SettingArchive::Note.find_by_file_id(@fluentd.agent.config_backup_dir, params[:id])
|
||||||
|
end
|
||||||
|
end
|
@ -14,6 +14,6 @@ class Fluentd::Settings::RunningBackupController < ApplicationController
|
|||||||
private
|
private
|
||||||
|
|
||||||
def find_backup_file
|
def find_backup_file
|
||||||
@backup_file = Fluentd::Setting::BackupFile.new(@fluentd.agent.running_config_backup_file)
|
@backup_file = Fluentd::SettingArchive::BackupFile.new(@fluentd.agent.running_config_backup_file)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -7,10 +7,10 @@ class Fluentd::SettingsController < ApplicationController
|
|||||||
|
|
||||||
def show
|
def show
|
||||||
@backup_files = @fluentd.agent.backup_files_in_new_order.first(Settings.histories_count_in_preview).map do |file_path|
|
@backup_files = @fluentd.agent.backup_files_in_new_order.first(Settings.histories_count_in_preview).map do |file_path|
|
||||||
Fluentd::Setting::BackupFile.new(file_path)
|
Fluentd::SettingArchive::BackupFile.new(file_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
@running_backedup_file = Fluentd::Setting::BackupFile.new(@fluentd.agent.running_config_backup_file)
|
@running_backedup_file = Fluentd::SettingArchive::BackupFile.new(@fluentd.agent.running_config_backup_file)
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
class Fluentd
|
class Fluentd
|
||||||
module Setting
|
module SettingArchive
|
||||||
class BackupFile
|
module Archivable
|
||||||
|
extend ActiveSupport::Concern
|
||||||
attr_accessor :file_path
|
attr_accessor :file_path
|
||||||
|
|
||||||
def self.find_by_file_id(backup_dir, file_id)
|
module ClassMethods
|
||||||
file_path = Pathname.new(backup_dir).join("#{file_id}.conf")
|
private
|
||||||
raise "No such a file #{file_path}" unless File.exist?(file_path)
|
|
||||||
|
|
||||||
new(file_path)
|
def file_path_of(dir, id)
|
||||||
end
|
file_path = Pathname.new(dir).join("#{id}#{self::FILE_EXTENSION}")
|
||||||
|
raise "No such a file #{file_path}" unless File.exist?(file_path)
|
||||||
def initialize(file_path)
|
file_path
|
||||||
@file_path = file_path
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_id
|
def file_id
|
||||||
@file_id ||= with_file { name.gsub(/.conf\Z/,'') }
|
@file_id ||= with_file { name.gsub(/#{Regexp.escape(self.class::FILE_EXTENSION)}\Z/,'') }
|
||||||
end
|
end
|
||||||
|
|
||||||
def name
|
def name
|
@ -89,8 +89,9 @@ class Fluentd
|
|||||||
return if over_file_count <= 0
|
return if over_file_count <= 0
|
||||||
|
|
||||||
backup_files_in_old_order.first(over_file_count).each do |file|
|
backup_files_in_old_order.first(over_file_count).each do |file|
|
||||||
next unless File.exist? file
|
note_file_attached_backup = file.sub(/#{Regexp.escape(File.extname(file))}\z/, ::Fluentd::SettingArchive::Note::FILE_EXTENSION)
|
||||||
FileUtils.rm(file)
|
FileUtils.rm(note_file_attached_backup) if File.exist? note_file_attached_backup
|
||||||
|
FileUtils.rm(file) if File.exist? file
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
20
app/models/fluentd/setting_archive/backup_file.rb
Normal file
20
app/models/fluentd/setting_archive/backup_file.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
class Fluentd
|
||||||
|
module SettingArchive
|
||||||
|
class BackupFile
|
||||||
|
include Archivable
|
||||||
|
attr_reader :note
|
||||||
|
|
||||||
|
FILE_EXTENSION = ".conf".freeze
|
||||||
|
|
||||||
|
def self.find_by_file_id(backup_dir, file_id)
|
||||||
|
note = Note.find_by_file_id(backup_dir, file_id) rescue nil
|
||||||
|
new(file_path_of(backup_dir, file_id), note)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(file_path, note = nil)
|
||||||
|
@file_path = file_path
|
||||||
|
@note = note || Note.create(file_path.sub(/#{Regexp.escape(FILE_EXTENSION)}\z/, Note::FILE_EXTENSION))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
28
app/models/fluentd/setting_archive/note.rb
Normal file
28
app/models/fluentd/setting_archive/note.rb
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
class Fluentd
|
||||||
|
module SettingArchive
|
||||||
|
class Note
|
||||||
|
include Archivable
|
||||||
|
|
||||||
|
FILE_EXTENSION = ".note".freeze
|
||||||
|
|
||||||
|
def self.find_by_file_id(backup_dir, file_id)
|
||||||
|
new(file_path_of(backup_dir, file_id))
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.create(file_path)
|
||||||
|
FileUtils.touch(file_path)
|
||||||
|
new(file_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(file_path)
|
||||||
|
@file_path = file_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def update!(content)
|
||||||
|
File.open(@file_path, "w") do |f|
|
||||||
|
f.write content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,6 +1,16 @@
|
|||||||
%ul
|
%table.table.table-hover.table-bordered
|
||||||
|
%tbody
|
||||||
|
%tr
|
||||||
|
%th= t('terms.backup_file')
|
||||||
|
%th= t('terms.backup_time')
|
||||||
|
%th= t('terms.note')
|
||||||
- @backup_files.each do |file|
|
- @backup_files.each do |file|
|
||||||
%li
|
%tr
|
||||||
= link_to(file.name, daemon_setting_history_path(id: file.file_id))
|
%td= link_to(file.name, daemon_setting_history_path(id: file.file_id))
|
||||||
%label= t('terms.backup_time')
|
%td.datetime= file.ctime.strftime t('time.formats.default')
|
||||||
= file.ctime.strftime(I18n.t 'time.formats.default')
|
%td
|
||||||
|
= form_for :note, url: daemon_setting_note_path(id: file.note.file_id), method: :patch do |f|
|
||||||
|
.form-group.input-group
|
||||||
|
= f.text_field :content, value: file.note.content, class: "note-content form-control", id: nil
|
||||||
|
%span.input-group-btn
|
||||||
|
= submit_tag t('terms.save'), class: 'btn btn-default'
|
||||||
|
@ -3,6 +3,11 @@
|
|||||||
= icon('fa-pencil')
|
= icon('fa-pencil')
|
||||||
= t("terms.reuse")
|
= t("terms.reuse")
|
||||||
|
|
||||||
|
- if @backup_file.note.content.present?
|
||||||
|
.row
|
||||||
|
.col-xs-12
|
||||||
|
%p= @backup_file.note.content
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-xs-12
|
.col-xs-12
|
||||||
%pre
|
%pre
|
||||||
|
@ -12,6 +12,7 @@ en:
|
|||||||
fluentd_status_running: Running
|
fluentd_status_running: Running
|
||||||
fluentd_status_stopped: Stopped
|
fluentd_status_stopped: Stopped
|
||||||
config_successfully_copied: "Config has been copied successfully. Please restart %{brand} to use the new config"
|
config_successfully_copied: "Config has been copied successfully. Please restart %{brand} to use the new config"
|
||||||
|
note_updating_success: "Note successfully updated."
|
||||||
|
|
||||||
terms: &terms
|
terms: &terms
|
||||||
name: Name
|
name: Name
|
||||||
@ -59,7 +60,9 @@ en:
|
|||||||
notice_restart_for_config_edit: "NOTICE: running %{brand} will restart after update config"
|
notice_restart_for_config_edit: "NOTICE: running %{brand} will restart after update config"
|
||||||
lines: Lines
|
lines: Lines
|
||||||
languages: Language
|
languages: Language
|
||||||
|
backup_file: Backup File
|
||||||
backup_time: Backed up at
|
backup_time: Backed up at
|
||||||
|
note: Note
|
||||||
reuse: reuse
|
reuse: reuse
|
||||||
|
|
||||||
plugins:
|
plugins:
|
||||||
|
@ -12,6 +12,7 @@ ja:
|
|||||||
fluentd_status_running: 稼働中
|
fluentd_status_running: 稼働中
|
||||||
fluentd_status_stopped: 停止中
|
fluentd_status_stopped: 停止中
|
||||||
config_successfully_copied: "設定をコピーしました。反映させるには、 %{brand}を再起動してください。"
|
config_successfully_copied: "設定をコピーしました。反映させるには、 %{brand}を再起動してください。"
|
||||||
|
note_updating_success: "メモを更新しました。"
|
||||||
|
|
||||||
terms: &terms
|
terms: &terms
|
||||||
name: アカウント名
|
name: アカウント名
|
||||||
@ -59,7 +60,9 @@ ja:
|
|||||||
notice_restart_for_config_edit: "※更新すると稼働中の%{brand}が再起動されます"
|
notice_restart_for_config_edit: "※更新すると稼働中の%{brand}が再起動されます"
|
||||||
lines: 行
|
lines: 行
|
||||||
languages: 言語
|
languages: 言語
|
||||||
|
backup_file: バックアップファイル
|
||||||
backup_time: バックアップ日時
|
backup_time: バックアップ日時
|
||||||
|
note: メモ
|
||||||
reuse: 再利用
|
reuse: 再利用
|
||||||
|
|
||||||
plugins:
|
plugins:
|
||||||
|
@ -68,6 +68,8 @@ Rails.application.routes.draw do
|
|||||||
post "reuse", action: 'reuse', on: :member, as: 'reuse'
|
post "reuse", action: 'reuse', on: :member, as: 'reuse'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
resources :notes, only: [:update], module: :settings, controller: :notes
|
||||||
|
|
||||||
resource :running_backup, only: [:show], module: :settings, controller: :running_backup do
|
resource :running_backup, only: [:show], module: :settings, controller: :running_backup do
|
||||||
post "reuse", action: 'reuse', on: :member, as: 'reuse'
|
post "reuse", action: 'reuse', on: :member, as: 'reuse'
|
||||||
end
|
end
|
||||||
|
@ -15,18 +15,18 @@ describe "histories", stub: :daemon do
|
|||||||
|
|
||||||
it 'show histories#index' do
|
it 'show histories#index' do
|
||||||
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.index.page_title'))
|
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.index.page_title'))
|
||||||
expect(all('.row li').count).to eq 9 #links to hisotries#show
|
expect(all('.row tr').count).to eq 9 + 1 # links to hisotries#show + 1 table header
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'will go to histories#show' do
|
it 'will go to histories#show' do
|
||||||
all('.row li a').first.click
|
all('.row tr td a').first.click
|
||||||
|
|
||||||
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.show.page_title'))
|
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.show.page_title'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'show' do
|
describe 'show' do
|
||||||
let(:last_backup_file) { Fluentd::Setting::BackupFile.new(daemon.agent.backup_files_in_new_order.first) }
|
let(:last_backup_file) { Fluentd::SettingArchive::BackupFile.new(daemon.agent.backup_files_in_new_order.first) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
visit "/daemon/setting/histories/#{last_backup_file.file_id}"
|
visit "/daemon/setting/histories/#{last_backup_file.file_id}"
|
||||||
|
27
spec/features/fluentd/setting/notes_spec.rb
Normal file
27
spec/features/fluentd/setting/notes_spec.rb
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
require "spec_helper"
|
||||||
|
|
||||||
|
describe "notes", stub: :daemon do
|
||||||
|
let!(:exists_user) { build(:user) }
|
||||||
|
include_context 'daemon has some config histories'
|
||||||
|
|
||||||
|
before { login_with exists_user }
|
||||||
|
|
||||||
|
describe 'update' do
|
||||||
|
let(:note_field) { ".note-content" }
|
||||||
|
let(:updating_content) { "This config file is for ..." }
|
||||||
|
|
||||||
|
before do
|
||||||
|
visit '/daemon/setting/histories'
|
||||||
|
within first("form") do
|
||||||
|
first(note_field).set updating_content
|
||||||
|
click_button(I18n.t('terms.save'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "update a content of a note" do
|
||||||
|
within first("form") do
|
||||||
|
first(note_field).value.should eq updating_content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -17,7 +17,7 @@ describe 'setting', stub: :daemon do
|
|||||||
page.should have_css('h1', text: I18n.t('fluentd.settings.show.page_title'))
|
page.should have_css('h1', text: I18n.t('fluentd.settings.show.page_title'))
|
||||||
page.should have_link(I18n.t('terms.edit'))
|
page.should have_link(I18n.t('terms.edit'))
|
||||||
page.should have_css('pre', text: 'GREAT CONFIG HERE')
|
page.should have_css('pre', text: 'GREAT CONFIG HERE')
|
||||||
expect(all('.row li').count).to eq Settings.histories_count_in_preview #links to hisotries#show
|
expect(all('.row tr').count).to eq Settings.histories_count_in_preview + 1 # links to hisotries#show + 1 table header
|
||||||
page.should have_link(I18n.t('fluentd.settings.show.link_to_histories'))
|
page.should have_link(I18n.t('fluentd.settings.show.link_to_histories'))
|
||||||
page.should have_text(I18n.t('fluentd.settings.running_backup.title'))
|
page.should have_text(I18n.t('fluentd.settings.running_backup.title'))
|
||||||
end
|
end
|
||||||
@ -29,7 +29,7 @@ describe 'setting', stub: :daemon do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'will go to histories#show' do
|
it 'will go to histories#show' do
|
||||||
all('.row li a').first.click
|
all('.row tr td a').first.click
|
||||||
|
|
||||||
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.show.page_title'))
|
page.should have_css('h1', text: I18n.t('fluentd.settings.histories.show.page_title'))
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user