Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save georgf/60e5b99e9ad54b5d5c5c858b6e837cae to your computer and use it in GitHub Desktop.
Save georgf/60e5b99e9ad54b5d5c5c858b6e837cae to your computer and use it in GitHub Desktop.
"main" ping size distributions on Nightly
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "raw",
"metadata": {},
"source": [
"---\n",
"title: How big are the incoming \"main\" pings?\n",
"authors:\n",
"- georg_fritzsche\n",
"tags:\n",
"- ping size\n",
"- firefox\n",
"- main ping\n",
"created_at: 2017-05-25\n",
"updated_at: 2017-05-25\n",
"tldr: How big are the incoming \"main\" ping currently? Nearly all are under 400kb.\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### How big are the incoming \"main\" pings?"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Unable to parse whitelist: /mnt/anaconda2/lib/python2.7/site-packages/moztelemetry/histogram-whitelists.json.\n",
"Assuming all histograms are acceptable.\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/mnt/anaconda2/lib/python2.7/site-packages/IPython/core/magics/pylab.py:161: UserWarning: pylab import has clobbered these variables: ['pylab']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n",
" \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib\n",
"import json\n",
"\n",
"from matplotlib import pyplot as plt\n",
"from moztelemetry.dataset import Dataset\n",
"from moztelemetry import get_pings_properties, get_one_ping_per_client\n",
"\n",
"import pylab\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Based on a 10% submission sample, determine what the ping sizes are.\n",
"As we don't have any meta field that tracks the real ping sizes, we estimate them using the serialized JSON string length."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[u'submissionDate',\n",
" u'sourceName',\n",
" u'sourceVersion',\n",
" u'docType',\n",
" u'appName',\n",
" u'appUpdateChannel',\n",
" u'appVersion',\n",
" u'appBuildId']"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Dataset.from_source(\"telemetry\").schema"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"fetching 6626.44431MB in 19594 files...\n"
]
}
],
"source": [
"pings = Dataset.from_source(\"telemetry\") \\\n",
" .where(docType='main') \\\n",
" .where(submissionDate=lambda x: int(x) >= 20170501 and int(x) < 20170514) \\\n",
" .where(appUpdateChannel=\"nightly\") \\\n",
" .records(sc, sample=0.1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sizes = pings.map(lambda p: len(json.dumps(p)))\n",
"size_series = pd.Series(sizes.collect())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Show the distribution of sizes in kb."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 168534.000000\n",
"mean 128.102847\n",
"std 76.480385\n",
"min 1.227539\n",
"25% 78.270752\n",
"50% 123.811035\n",
"75% 164.181396\n",
"90% 214.919922\n",
"95% 256.753906\n",
"99% 373.308438\n",
"99.9% 615.223617\n",
"max 1063.716797\n",
"dtype: float64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(size_series / 1024).describe(percentiles=[0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd24dae0e50>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd24dad06d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"size_series.hist(xrot=45)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fd264815d50>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fd264da87d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"size_series.hist(xrot=45, log=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"hide_input": false,
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
# coding: utf-8
---
title: How big are the incoming "main" pings?
authors:
- georg_fritzsche
tags:
- ping size
- firefox
- main ping
created_at: 2017-05-25
updated_at: 2017-05-25
tldr: How big are the incoming "main" ping currently? Nearly all are under 400kb.
---
# ### How big are the incoming "main" pings?
# In[1]:
import pandas as pd
import numpy as np
import matplotlib
import json
from matplotlib import pyplot as plt
from moztelemetry.dataset import Dataset
from moztelemetry import get_pings_properties, get_one_ping_per_client
import pylab
get_ipython().magic(u'pylab inline')
# Based on a 10% submission sample, determine what the ping sizes are.
# As we don't have any meta field that tracks the real ping sizes, we estimate them using the serialized JSON string length.
# In[2]:
Dataset.from_source("telemetry").schema
# In[3]:
pings = Dataset.from_source("telemetry") .where(docType='main') .where(submissionDate=lambda x: int(x) >= 20170501 and int(x) < 20170514) .where(appUpdateChannel="nightly") .records(sc, sample=0.1)
# In[4]:
sizes = pings.map(lambda p: len(json.dumps(p)))
size_series = pd.Series(sizes.collect())
# Show the distribution of sizes in kb.
# In[5]:
(size_series / 1024).describe(percentiles=[0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999])
# In[8]:
size_series.hist(xrot=45)
# In[7]:
size_series.hist(xrot=45, log=True)
# In[ ]:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment