Firebase性能详细的URL模式

时间:2018-02-21 08:52:26

标签: android firebase firebase-performance

即使API在过去几个月内拥有超过30k的样本,我也无法在Firebase性能监控中查看详细的网址格式。

它只显示如下的根API域:

api.myAppName.in/**

而不是

api.myAppName.in/app/v3/user/*/profile/

如果您将鼠标悬停在控制台上,控制台只会在API上显示“未分类”标签

  

api.myAppName.in中的详细网址格式将在我们收集时显示   更多的样本。收集后最多允许24小时。

但如前所述,它已经过了几个月,超过30万个样本。

如果有帮助,我正在使用改造。

2 个答案:

答案 0 :(得分:7)

我已经联系了Firebase支持人员,他们的答案是:

  

...

     
      
  • here所述,虽然Performance Monitoring报告了针对您应用的大多数网络请求,但可能未报告某些网络请求。因此,建议添加对应用程序中特定请求的监视。

  •   
  • 为了将请求报告给Performance Monitoring控制台,使用trace.start()开始的任何跟踪也必须是   通过调用trace.stop()方法停止。永远不会的痕迹
      停止,从不报告。

  •   
  • 通配符仅基于路径段,而不基于查询字符串。查询字符串将被忽略,以便在仪表板中进行汇总。
  •   
  • 对于域a.b.c,应该从几十个唯一的设备中请求路径a.b.c / d /,以便将路径a.b.c / d /   在您选择的时间范围内分别显示在仪表板中   过滤器。
  •   
  • Known Issues with Performance Monitoring
  •   
     

对于我上面提到的第四点,还有一件事情要   记住。假设N是表示   我前面提到的“几打”门槛。而且,我们是   监视以下3个不同的路径段:   1. www.something.com/a/   2. www.something.com/b/   3. www.something.com/c /

     

在给定的时间范围内,如果以上所有3条路径均收到N-1   命中。即不满足阈值要求。虽然数量   的点击量似乎是N的近3倍   集体www.something.com(因为这就是仪表板   显示),则每个路径的单个匹配均未达到   给定的时间范围,因此,只有合计的数量统计信息   显示。

     

...

我用来拦截改造请求并监视请求时间的代码是:(为了安全起见,我删除了查询参数数据)

val builder = OkHttpClient.Builder()
 .addInterceptor(FirebasePerformanceInterceptor(FirebasePerformance.getInstance()))
  .build()

// Adapted from: http://qaru.site/questions/15007824/how-can-i-get-the-url-and-method-of-retrofit-request-on-onsubscribe-of-rxjava-2-custom-operator
class FirebasePerformanceInterceptor(private val performanceInstance: FirebasePerformance) : Interceptor {
  override fun intercept(chain: Interceptor.Chain): Response {
    val request = chain.request()
    //Get request values
    val url = request.url().url()
    val urlPath = getUrlWithoutQuery(url)

    val requestPayloadSize = request.body()?.contentLength() ?: 0L
    val httpMethod = request.method()

    //Initialize http trace
    val trace = performanceInstance.newHttpMetric(urlPath, httpMethod)
    trace.setRequestPayloadSize(requestPayloadSize)
    trace.start()

    //Proceed
    val response = chain.proceed(chain.request())

    //Get response values
    val responseCode = response.code()

    //Add response values to trace and close it
    trace.setHttpResponseCode(responseCode)
    trace.stop()

    return response
  }
    }

private fun getUrlWithoutQuery(url: URL): URL {
  val uri = URI(url.protocol, url.host, url.path, null)
  return uri.toURL()
}

要测试是否正确记录日志,请执行以下操作:Debugging tutorial: 您会看到类似:

10-24 19:48:21.162 23037 24411 I FirebasePerformance: Logging NetworkRequestMetric - https://your-api-domain.com/cart 0b 147809ms,

答案 1 :(得分:4)

Firebase Performance Monitoring现在支持创建自定义URL模式,使您可以定位更特定的URL。从文档中:

  

您可以创建自定义URL模式,以监视Firebase通过其派生的自动URL模式匹配未捕获的特定URL模式。例如,您可以使用自定义URL模式对特定URL进行故障排除或监视一段时间内的一组特定URL。

因此,如果您确实想捕获类似api.myAppName.in/app/v3/user/*/profile/**之类的东西,现在就可以?

有关更多详细信息,请参见the docs