1

一般的に次のことを行うソリューションを探しています。

  • すべてのユーザー アクションをログに記録します。可能であれば、コントローラー名、アクション、およびパラメーターの形式で
  • また、実際に変更されたモデル オブジェクトのみを記録します。たとえば、コントローラーはパラメーターの長いリストを取得する場合がありますが、実際にモデル オブジェクトに保存されるのはそのうちの 2 つだけです。変更された属性を知りたいです。
  • このデータは照会できます。たとえば、CRM アプリケーションでのユーザーのアクションの履歴を検索できます。

複数のアプリケーション (すべて同じデータベースにヒット) 用の共有モデルのセットアップがあるため、データがどのアプリケーションから来たかを記録できます。これは、私たちのアプリケーションに共通する中央の場所で、このようなものを実装したい場所です。

これを行う理由は、事後に多くのフォレンジックを行うためです。誰がレコードに何かを変更したかを確認するように求められるため、多くの場合、運用ログに移動してそこでその情報を検索する必要があります。可能であれば、標準 SQL を使用する代わりにクエリを実行できるようにしたいと考えています。

これを行うもう 1 つの理由は、さまざまな開発者がさまざまなアプリケーションを所有しており、一部のアプリケーションが本来の動作をしないことがあるためです。どのアプリケーションが特定の値をモデル オブジェクトに保存したかを調べることができれば、それが役に立ちます。

どのコントローラー名/アクションを確認するかについてのパターンはまったくありません。いくつかのモデルに監査ロジックを追加しましたが、監査を設定していない別のモデルについて何かをチェックアウトするように求められます。為に。

理にかなっていれば、この目的のために Redis のようなものを喜んで使用します。私は Redis を使った経験がほとんどなく、Redis がこのようなことを処理できるかどうかはわかりません。

これは、すべてのユーザー アクションをログに記録できるという現実的な期待ですか? おおよそ、さまざまなアプリケーションから 1 時間あたり合計で 300 ~ 500 のユーザー アクションがあると見積もっています。それとも、この可能性を探るのをやめて、一般的なユーザー アクションをどのように追跡するべきかについて、既成概念にとらわれずに考える必要がありますか?

4

1 に答える 1

0

その現実的。人々はRedisを一般的なキャッシングの目的で使用しているため、ユーザーの使用状況を追跡するだけであれば問題ありません。

redis オブジェクトの gem を使用します https://github.com/nateware/redis-objects

アクションごとに、redis ハッシュを作成します。

各ハッシュは、各ユーザーのキーで構成されます (ユーザーの ID が機能します)。各キーは、そのアクションがそのユーザーによって実行された回数につながります。

集計を行うときに、速度を上げるために incr メソッドを使用することもできます。

また、特に注意したい場合は、X の増分後に情報をデータベースのユーザー行に保存できるように設定できます。もちろん、これはいくらかのリソースを消費しますが、それがあなたにとって価値があるなら、あなたにとって価値があります.

編集:コントローラーの例を提供する必要があると思います

class BlogController < OneForMyBabyController

   def show
     #Your Code Here
     #---------------
     if logged_in
       #When you create a new Redis::HashKey its first look to redis
       #if the object already exists it just gets it, other wise it
       #'creates it'*.
       blog_show_user_tracking = Redis::HashKey.new("BlogShowUserTracking")
       blog_show_user_tracking.incr(@user.id)
       #This is about how would deal with updating after a number of incr
       #This would require a separate look up from the incr above.
       #x here is the number of incr before you update the SQL DB
       if blog_show_user_tracking[@user.id] % x == 0
          #Update User To Reflect New Tracking
       end
     end
   end

end

編集: ユーザーのみがログインしている場合の使用方法を示します。

于 2013-01-22T02:25:51.677 に答える