Skip to content

Record message size transmitted over action cable

Felipe Cardozo requested to merge issue_326364 into master

What does this MR do?

Record message size transmitted with action cable.

related to #326364 (closed)

Sample payload transmitted on action cable

The data processed on ruby app is a Hash object, however, it is encoded as JSON before sent over the websocket. We have to serialize the data to measure its size precisely. For more information check #326364 (comment 543538666).

 {
     "result" => {
         "data" => {
             "issuableAssigneesUpdated" => {
                  "assignees" => {
                          "nodes" => [
                         [0] {
                                 "status" => nil,
                             "__typename" => "UserCore",
                                     "id" => "gid://gitlab/User/25",
                              "avatarUrl" => "https://www.gravatar.com/,
                                   "name" => "jaisna jaisna",
                               "username" => "jaisna",
                                 "webUrl" => "http://127.0.0.1:3000/jaisna"
                         }
                     ],
                     "__typename" => "UserCoreConnection"
                 },
                 "__typename" => "Issue"
             }
         }
     },
  "more" => true
}

Sample of metrics generated on localhost

# HELP action_cable_transmitted_bytes Multiprocess metric
# TYPE action_cable_transmitted_bytes histogram
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="+Inf"} 1
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.005"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.01"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.025"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.05"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.1"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.25"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="0.5"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="1"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="10"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="2.5"} 0
action_cable_transmitted_bytes_bucket{channel="GraphqlChannel",operation="issuableAssigneesUpdated",le="5"} 0
action_cable_transmitted_bytes_count{channel="GraphqlChannel",operation="issuableAssigneesUpdated"} 1
action_cable_transmitted_bytes_sum{channel="GraphqlChannel",operation="issuableAssigneesUpdated"} 388

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Felipe Cardozo

Merge request reports

Loading