Logo
  • DoRubyとは
  • お問い合わせ
  • Ruby/Rails
  • Web開発
  • Webマーケティング
  • アピリッツ
  • ライフハック
  • ゲーム制作/開発
  • アプリ開発
  • 新しいカテゴリ
  • Railsの小技
  • Rubyの小技
  • Gemの紹介
  • ActiveRecord
  • 初心者向け
  • Java/Scalaテク
  • Unixのあれこれ
  • データベース
  • スマホ開発
  • HTML/CSS/JavaScript
  • デザイン製作
  • インフラ
  • クラウド
  • セキュリティ
  • エディタ
  • バージョン管理
  • その他
  • python
  • アクセス解析
  • Googleアナリティクス
  • Googleデータスタジオ
  • Web広告
  • SEO
  • UI/UX
  • ソーシャルメディア
  • EC開発
  • Webシステム開発
  • コンサルティング
  • Webデザイン
  • ブロックチェーン
  • ゲーム紹介
  • アプリ紹介
  • ASP
  • 風景
  • パソコン
  • ツール
  • ガジェット
  • 仕事術
  • 健康
  • 生活
  • 書評
  • Excel(エクセル)
  • PowerPoint(パワーポイント)
  • ゲームプランニング
  • SpriteStudio
  • マスターデータ入力/作成
  • Unity
  • キャラクターデザイン
  • ゲームシナリオ
  • レベルデザイン
  • ゲーム分析
  • 3DCG
  • イラスト制作
  • CG/アニメーション
      1. ホーム
      2. Ruby/Rails
      3. Railsの小技
      4. APIの時間占有率を簡単に調べてみた
      • 2017-12-04
        • カテゴリ:
        • Railsの小技
        • タグ:
        • ActiveRecord
        • Rails
        • ruby

      APIの時間占有率を簡単に調べてみた

      この記事は公開から1年以上が経過しています。情報が古い可能性がありますのでご注意ください。
      7076332b26dd180c56fbe45e5357608f

      ツールやgemを入れずに調べてみた。

       なるほど、ボトルネックはAPIに掛かる時間だけではなく、APIが呼び出される回数にも依存するのか、といつしか知ってから数ヶ月。
       RailsのAPIのどれが一番時間を占有しているのか取り敢えず簡単に調べたいなー、と思って特に何のgemとかも入れずに調べてみました。

      準備

       取り敢えず、そのAPIの時間占有率を調べる為のデータ型を作ってしまおう。

       コンソール上で

      bundle exec rails g model ApiOccupancyData
      

       マイグレーションを書き込み。最低限必要なのは、コントローラ名、アクション名、それからAPIの消費秒数と総呼び出し回数でしょう。

      class CreateApiOccupancyData < ActiveRecord::Migration
        def change
          create_table :api_occupancy_datas do |t|
            t.string :controller_name, comment: "コントローラ名"
            t.string :action_name,     comment: "アクション名"
            t.integer :average_time,     default: 0, comment: "API消費秒数(ms)"
            t.integer :total_call_count, default: 0, comment: "API総呼び出し回数"
            t.timestamps
          end
          add_index :api_time_occupied_datas, [:controller_name, :action_name], unique: true, name: "api_name_index"
        end
      end
      

       それで、最後にrake db:migrateしてモデル作成。

      計測

       取り敢えず、ログを弄る、ログデータから取ってくるとかするのは、モンキーパッチをする必要がありそうだし、深く調べなきゃいけないし、色々時間が掛かりそう。
       というわけで、簡単にコントローラ全体にbefore_action, after_actionを掛けてしまって、時間を取ってしまうことにしました。

      class ApplicationController < ActionController::Base
        before_action :set_time
        after_action  :recognize_time
      
        def set_time
          @start_time = Time.now
        end
      
       def recognize_time
          #ms単位で差を計測
          time_cost = ((Time.now - @start_time) * 1000).to_i
          #パラメータにコントローラ名とアクション名は入っている
          controller_name = params[:controller]
          action_name = params[:action]
          record = ApiOccupancyData.find_or_create_by(controller_name: controller_name, action_name: action_name)
          #平均時間を上書き
          record.average_time = ((record.average_time * record.total_call_count) + time_cost) / (record.total_call_count + 1)
          #総呼び出し回数を更新
          record.total_call_count += 1
          record.save
        end
      end
      

       後はRailsを色々動かしてみて、データが貯まるのを待ちましょう。

      出力

      Railsコンソール上であとは、

      ApiOccupancyData.order("average_time * total_call_count DESC")
      

       とでも打てば時間占有率が高い順にデータが列挙されていきます。
       そこから、API単位で詳しく見ていって、どこで時間が掛かっているか等、調べていけます。
       後、chart.jsで可視化とかをするとより分かり易くなったり。

      API重み(絶対)
      API重み(相対)


      • 64 views
        • Tweet
        • このエントリーをはてなブックマークに追加

      この記事を書いた人
      F7eb52677a0e9796e154969ea5171e15?default=mm&size=80
      HelloWorld?
      ズボラなのにケーキを作って成功したプログラマ

      「いいね!」するとDoRubyの最新記事を受け取ることができます。

      Facebook

      Twitterから最新記事を受け取るならこちら

      Follow @doruby

      Feedlyから最新記事を受け取るならこちら

      follow us in feedly

      おすすめの記事
      • 502 views
      • 2015-10-01
      RailsのViewを自在にカスタマイズするための「Cosme」gem
      • 1,638 views
      • 2016-07-27
      リニューアルをしたDoRubyの3つの目的
      • 685 views
      • 2016-07-31
      carrierwaveとfogでRiak CSへの画像アップロードを実装する
      • 1,100 views
      • 2017-04-24
      アピリッツの新卒合宿2017

      カテゴリ

      Icon category 1Ruby/RailsList elementRailsの小技List elementRubyの小技List elementGemの紹介List elementActiveRecordList element初心者向けIcon category 4Web開発List elementJava/ScalaテクList elementUnixのあれこれList elementデータベースList elementスマホ開発List elementHTML/CSS/JavaScriptList elementデザイン製作List elementインフラList elementクラウドList elementセキュリティList elementエディタList elementバージョン管理List elementその他List elementpythonIcon category 5WebマーケティングList elementアクセス解析List elementGoogleアナリティクスList elementGoogleデータスタジオList elementWeb広告List elementSEOList elementUI/UXList elementソーシャルメディアIcon category 6アピリッツList elementEC開発List elementWebシステム開発List elementコンサルティングList elementWebデザインList elementブロックチェーンList elementゲーム紹介List elementアプリ紹介List elementASPList element風景Icon category 7ライフハックList elementパソコンList elementツールList elementガジェットList element仕事術List element健康List element生活List element書評List elementExcel(エクセル)List elementPowerPoint(パワーポイント)List elementゲーム制作/開発List elementゲームプランニングList elementSpriteStudioList elementマスターデータ入力/作成List elementUnityList elementキャラクターデザインList elementゲームシナリオList elementレベルデザインList elementゲーム分析List element3DCGList elementイラスト制作List elementCG/アニメーションList elementアプリ開発List element新しいカテゴリ

        人気の記事
        • 26 views
        • 2019-02-12
        カスタマーへの活用促進とヘルススコア
        最近の記事
        • 26 views
        • 2019-02-12
        カスタマーへの活用促進とヘルススコア
        • 108 views
        • 2019-01-08
        日本でもっとカスタマーサクセスを盛り上げよう!!の年末イベント
        • 170 views
        • 2018-12-10
        【Rails】I18nの言語データをDBから取得 / キャッシュ使用【i18n/i18n-active_record】
        • 159 views
        • 2018-12-10
        【Rails】I18nの言語データをDBから取得【i18n/i18n-active_record】
        • 141 views
        • 2018-11-12
        【jQuery】開閉パネルを最初から開いた状態にする
        Facebook

          サイト情報
          • DoRubyとは
          • 株式会社アピリッツ

          企業情報
          • 会社概要
          • 採用情報
          • お問い合わせ

          ソーシャルアカウント
          • Facebook
          • Twitter
          サービス製品
          • コミュニティサイト
          • Android向け ECアプリ制作パッケージ「ポケコマ」
          • レコメンドASP
          • サイト内検索ASP「Advantage Search」
          • オープンソースECサイト構築パッケージ「エレコマ」

          • 受注・在庫・商品情報一元管理「モールコネクター」
          • セキュリティ診断サービス
          • 戦略的EC画面設計・制作サービス
          • Googleアナリティクスセミナー
          • アクセス解析コンサルティング
          • SEOコンサルティング

          Copyright © Appirits All Rights Reserved.