Code Monkey home page Code Monkey logo

log-archiver's People

Contributors

dependabot[bot] avatar koi-chan avatar ochaochaocha3 avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

log-archiver's Issues

キーワード検索での複数チャンネル指定

複数チャンネル指定時に、結果表示画面とそのURLがどのような形になればよいか自信がなかったので立ててみました。

画面

該当メッセージ一覧で表示する項目に、以下のようにチャンネルを追加する?

検索結果:こんにちは

2017-03-25

時刻 チャンネル メッセージ
12:34:56 #cre (ocha)
こんにちは
11:23:34 #もの書き (koi-chan)
こんにちは

2017-03-24

時刻 チャンネル メッセージ
12:23:34 #cre (ocha)
こんにちは

...

発言(PRIVMSG・NOTICE)のテーブルを分ける

発言(PRIVMSG・NOTICE)は特別に集計する場合があったり全文検索の対象としたりするので、テーブルを分けておくと扱いが楽そう。モデル名としては「Remark」あたりが適当?

他のメッセージと同じように「type」カラムを設けて、Privmsg・Noticeに継承させると扱いやすくなると思われる。

Chart.jsの読み込みエラーを直す

発言数のグラフ表示で使っているchart-js-railsについて、以下のコミットより読み込むJavaScriptファイルの名前が変更された。

coderbydesign/chart-js-rails@c37267b

# 私見:広い意味でAPIの変更と見なせるので、パッチバージョンでなくメジャーバージョン、せめてマイナーバージョンを上げてほしい😢

対策としては、app/assets/javascripts/application.jsの

//= require Chart

//= require Chart.min

に変更する。

QUITのメッセージを変更する

IRCログより。

23:35:13 <koi-chan> QUITしたときのメッセージなんですが、「クライアントが終了しました」より「切断されました」の方がすっきりするように思うのですがいかがでしょうか
04:48:16 <OTE> QUIT時メッセージは確かに「切断されました」の方が適切だと感じます。

特定の日時のログを一覧する

現在の実装では、ログの本文はある1日分しか表示することが出来ない。
データベースに保存しているため本来は「1日」という縛りはないはずなので、特定の日時のログを全て表示できるようにしたい。
例:「#もの書き の昨日の22時から今日1時にかけて、日付をまたいで行なわれた会話のログをつなげて(一つの画面で)見たい」

検索を使うと複数チャンネル・範囲指定の日時で抽出が可能だが、出力されるのが(前後のログを含む)本文ではなく、マッチしたその発言しか出てこない。

UserInterface: .log urlの引数未指定時にエラーが出る

条件分岐の間違いにより「.log url」だけのときにエラーが出るようです。

# (?: | ) の左側にマッチし、$1はnilになる
match(/url(?:$| (today|yesterday|list))/, method: :url)
date = case(day)
when 'list'
  send_and_record(m, result)
  return
when 'today'
  Date.today
when 'yesterday'
  Date.today.prev_day
else
  # day == nil なのでここに来る
  begin
    # Date.parse(nil) はTypeErrorを起こす
    Date.parse(day)
  rescue ArgumentError => e
    send_and_record(m, "#{header}日付指定が間違っています")
    return
  end
  # TypeErrorはrescueされないので例外発生
end

ある特定の一日分のログを検索しづらい

ある特定の日のログを検索しようと開始・終了を同じ日付にすると、検索結果が0件になる。
これは、検索条件の終了日の00:00:00までのログを検索しようとしているためだと思われる。
より直感的な操作をできるようにするため、これを終了日の23:59:59までを検索出来るようにしたい。

メッセージ表示を追加する

現在は通常表示・生ログ(風)表示の2パターンの表示が出来るようになっている。

他アプリケーションから読みやすくするために JSON 形式での出力と、LimeChat2 形式での出力に対応したい。

ログをコピペすると、複数行に分かれる

ログをコピペすると、1行が複数行に分かれる。

2017-04-14 #cre ログより

14:54:28 (asahiya) 発言行をコピペすると、2行になるんですけど。これだとログのチャットへの引用が見にくくなるんじゃないかなーと
14:54:46 (asahiya) #Nickと発言本文で、2行。
14:55:10 (asahiya) 1行になるならそーしていただけるとたすかりまする
14:56:04 (koi-chan) http://gyazo.cre.jp/data/340a4814b6f27340792f09de3e4c31f1.png なるほど、確かに。ありがとうございます
14:56:04 (Toybox) FetchTitle: (image/png; 7.24 KB)
14:56:04 (Role) FetchTitle: (image/png; 7.24 KB)
14:56:41 (asahiya) あ。発言時間込みだと4行ってことになるんですかね。
14:56:50 (koi-chan) みたいです
14:57:24 (asahiya) ……それだと正直ログの引用が全く使え無くなるレベルって感覚です。手間が増えすぎるなと
14:57:45 (koi-chan) 了解です、検討してみます
14:57:50 (asahiya) 2,3行の複数行なら一括で出したい時があるので。
14:57:57 (asahiya) すみませんがよろしくお願いします
14:58:30 (asahiya) #コピペ時に発言時間を別にする、とかできるならそれでもいいと思います。
14:58:48 (asahiya) #引用したいのは発言本文なので。

Cookieを更新するタイミングについて

ログの表示スタイル(通常か生ログか)等をCookieに保存するという案が以前出ましたが、Cookieを更新するタイミングをどうするか考えています。現在考えているのは

  1. URLから判断し、表示のたびに更新する:URLのクエリパラメータに style=raw が入っていたら、 ページ読み込み時に message_list_style=raw という値でCookieを更新する。通常表示(style=normal または style 指定なし)でも同様に message_list_style=normal という値でCookieを更新する。
  2. タブのクリック時のみ更新する:JavaScriptを使い、1日分の表示のスタイルを指定するタブ(「通常表示」か「生ログ」)をクリックしたときにCookieを更新する。

の2案です。どちらが使いやすそうでしょうか?

チャンネルごとに noindex 出来るようにする

同じチャンネルを複数の LogArchiver で取得・公開すると、同じ内容のウェブサイトとして SEO の問題がある。
ログの取得・公開は行なうが、そのチャンネルのページに meta タグの noindex を指定できるようにしたい。
もしくは、link タグの canonical で任意のウェブページを指定できるようにしたい。

Ruby 2.4 への対応

Ruby 2.4.0 で実行できるようにする。
ruby24 ブランチで、Travis-CIでのチェックは開始した。 -> b791ecc

json 1.8.3 を使い続けているのが原因で、どうやら(このバージョンが?) ruby2.4.0 でビルドできないのが原因である。
ただ、ほかの gem と依存関係にあるためと思われるのだが、bundle update の対象にならない。

rails ごとアップデートしてしまったものだろうか(現在は v4.2.6)。

Rails: ページタイトルを設定ファイルで変更できるようにする

ページタイトル(ページ上部と title タグの中身)にある「IRC ログアーカイブ」の文字列を、設定ファイル(もしくはデータベース内に保存する設定)で変えられるようにしたい。

ベータ版として公開するときにはそれを示しておきたいが、現在はソースを直接書き換えなくてはいけない、ですよね?

Rails 5.x に移行する

バージョンはできるだけこまめにあげた方が良いそうなのですが、すでに何世代か遅れてしまっています。
srv5 のOS再インストールを行なう際に古い環境を減らしたいため、それまでに 5.2 系列までアップデートしたいです。

できるだけこまめに(少なくともマイナーバージョンは飛ばさずに)、アップデートしていった方が良いようです。

検索の検証失敗時に例外が発生する

検索の条件にエラーがあった際、例外が発生する。

Messages::SearchesController#createやshowからWelcomeControllerに対応するビューを呼び出すため、app/views/welcome/index.html.erbにおいてパーシャルを描画するときに明示的にwelcomeのパスを指定する必要がある。

メッセージの削除(非表示)機能

メッセージを何らかの理由(例えばIRCサーバ規約違反など)で非表示にする際、ログデータ自体を削除するのではなく、非表示にする事を設定するカラムを追加したい。
そのカラムに設定する値を、例えば

  • 0なら表示(デフォルト)
  • 1なら規約違反で削除
  • 2なら誰かしらの個人情報のため削除
  • 9ならその他の理由で削除

などの理由をつけて非表示にしたい。

参加・退出のメッセージを既定で表示するべきか

似たシステムとしてwhitequark/ircloggerというのがあります。

こちらでは参加・退出のメッセージ(JOINとかQUITとか)が最初は表示されず、チェックボックスで表示するモードに変えられます。最初はログを簡潔に表示して、必要ならばすべてのメッセージを表示することも可能、という方針のようです。

最初の表示が見やすい印象があったのですが、log-archiverにも取り入れた方がよいでしょうか?

空行を記録するようにする

IRCでは空白文字で空行を作る場合がそれなりの頻度であるので、それも記録するようにしたい。

現在はPrivmsg・Noticeモデルのバリデーションで、messageが空白のみのとき無効としている。そのため、そのメッセージは登録しようとしても取り消されてしまう。

全角空白のみは無効

ユーザーの接続元の表示を簡単にする

IRCログより。

23:35:50 <koi-chan> あと、ユーザーの接続元の表示なんですが、
23:36:23 <koi-chan> nick (nick!user@host) という書式になっていますが、nick (user@host) で良いと思います。
04:49:03 <OTE> 接続元表示についても鯉さんの提案のモノで良いと思います。

テストに通らなくなったものを通るようにする

以下の5つ、全て rails4.2 では通っていた。

 FAIL["test_検索結果が正しく表示される", #<Minitest::Reporters::Suite:0x00000009cf3d30 @name="MessagesSearchTest">, 14.670947776990943]
 test_検索結果が正しく表示される#MessagesSearchTest (14.67s)
        日付の見出しが存在する.
        Expected 0 to be >= 1.
        test/integration/messages_search_test.rb:24:in `block in <class:MessagesSearchTest>'

 FAIL["test_ニックネームを指定した場合の検索結果が正しい", #<Minitest::Reporters::Suite:0x0000000a363d50 @name="MessageSearchTest">, 21.57572074700147]
 test_ニックネームを指定した場合の検索結果が正しい#MessageSearchTest (21.58s)
        Expected: 5
          Actual: 0
        test/models/message_search_test.rb:165:in `block in <class:MessageSearchTest>'

 FAIL["test_検索文字列とニックネームと日付を指定した場合の検索結果が正しい", #<Minitest::Reporters::Suite:0x0000000994d848 @name="MessageSearchTest">, 21.809181190037634]
 test_検索文字列とニックネームと日付を指定した場合の検索結果が正しい#MessageSearchTest (21.81s)
        Expected: 2
          Actual: 0
        test/models/message_search_test.rb:203:in `block in <class:MessageSearchTest>'

 FAIL["test_検索文字列とニックネームを指定した場合の検索結果が正しい", #<Minitest::Reporters::Suite:0x0000000b708950 @name="MessageSearchTest">, 22.11692432599375]
 test_検索文字列とニックネームを指定した場合の検索結果が正しい#MessageSearchTest (22.12s)
        Expected: 3
          Actual: 0
        test/models/message_search_test.rb:185:in `block in <class:MessageSearchTest>'

 FAIL["test_検索文字列を指定した場合の検索結果が正しい", #<Minitest::Reporters::Suite:0x0000000a7639a0 @name="MessageSearchTest">, 22.309156202012673]
 test_検索文字列を指定した場合の検索結果が正しい#MessageSearchTest (22.31s)
        Expected: 4
          Actual: 0
        test/models/message_search_test.rb:146:in `block in <class:MessageSearchTest>'

db:migrateの後、db/schema.rbが変更されてデータベース更新時にエラーが発生する

rails db:migrate の後、db/schema.rb が変更される。変更後、データベース更新時にエラーが発生するためテストが通らなくなる。

Rails 4.2ではこの問題は発生せず、Rails 5から発生するようである。

db:migrate 前後の db/schema.rb の差分

diff --git a/db/schema.rb b/db/schema.rb
index 19db4de..2631b6f 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.

-ActiveRecord::Schema.define(version: 20170704121029) do
+ActiveRecord::Schema.define(version: 20170617130524) do

   create_table "channel_last_speeches", force: :cascade, options: "ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC" do |t|
     t.integer  "channel_id"
@@ -108,5 +108,7 @@ ActiveRecord::Schema.define(version: 20170704121029) do
     t.index ["username"], name: "index_users_on_username", unique: true, using: :btree
   end

+  add_foreign_key "channel_last_speeches", "channels", name: "channel_id"
   add_foreign_key "channel_last_speeches", "conversation_messages", name: "conversation_message_id"
+  add_foreign_key "conversation_messages", "channels", name: "channel_id"

IRCボット:すべてのプラグインでAtheme Servicesにログインする必要があるか

IRCボットのプラグインの基底クラスLogArchiver::Plugin::Baseのコンストラクタに @ircserv = IrcServ.new という部分があります。これが実行されるため、すべてのプラグインにおいて読み込み時にAtheme Servicesにログインしようとします。

しかし、LoginNickservを除いてAtheme Servicesを利用しているようには見えません。また、LoginNickservはローカル変数でXMLRPCクライアントを作るので、結局 @ircserv は使いません。

したがって、この部分は少なくとも現在の時点では不要ではないでしょうか?

IRC ボットの設定をデータベースから読み出すようにする

現在は YAML 形式のテキストファイルで行なっている IRC ボットの設定を、サイト名などと同様にデータベースに保存し、リアルタイムに書き換えられるようにする。

メリット

  • 変更した設定がリアルタイムに更新される
  • 変更を適用するために再起動しなくて済むようになる
  • 起動している状態での設定変更が容易になる

デメリット

  • 起動していない状態での設定変更が面倒になる
  • 設定情報を利用するたびにデータベースアクセスを行なう必要がある

ホームページのフォームのレイアウト変更

特に横幅が広いときのレイアウトを修正する。

現在の問題点は

  • 共通
    • ボタンが左にあり、左に偏っている印象がある。
  • チャンネル閲覧
    • チャンネル選択のドロップダウンリストが横に長過ぎる

そこで、以下のようにする。

  • 共通
    • ボタンを右に揃える。
  • チャンネル閲覧
    • 横幅がタブレットサイズ(sm)以上の場合、チャンネル選択と日時選択を横に並べる。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.