Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save katejim/c7ca9befa55992435741910f0deb3e4b to your computer and use it in GitHub Desktop.
Save katejim/c7ca9befa55992435741910f0deb3e4b to your computer and use it in GitHub Desktop.
Investigation high ration of health ping clients
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import ujson as json\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np\n",
"import plotly.plotly as py\n",
"import pandas as pd\n",
"\n",
"from plotly.graph_objs import *\n",
"from moztelemetry import get_pings_properties, get_one_ping_per_client\n",
"from moztelemetry.dataset import Dataset\n",
"from collections import Counter\n",
"import operator\n",
"from operator import itemgetter\n",
"\n",
"get_ipython().magic(u'matplotlib inline')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pings = Dataset.from_source(\"telemetry\") \\\n",
" .where(docType='health', appUpdateChannel=\"beta\") \\\n",
" .records(sc, sample=1)\n",
" \n",
"cachedData = get_pings_properties(pings, [\"creationDate\", \"payload/pingDiscardedForSize\", \"payload/sendFailure\", \n",
" \"clientId\", \"meta/submissionDate\", \"payload/os\", \"payload/reason\", \n",
" \"meta/geoCountry\", \"application/version\"]).cache()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import matplotlib.dates as mdates\n",
"def plotlistofTuples(listOfTuples, title=\"\", inColor='blue'):\n",
" keys = [t[0] for t in listOfTuples]\n",
" values = [t[1] for t in listOfTuples]\n",
"\n",
" plt.figure(1)\n",
" fig = plt.gcf()\n",
" fig.set_size_inches(15, 7)\n",
"\n",
" plt.title(title)\n",
" plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))\n",
" plt.bar(range(len(listOfTuples)), values, align='center', color=inColor)\n",
" plt.xticks(range(len(listOfTuples)), keys, rotation=90)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Correlation between sendFailure count and Health ping reason\n",
"analyse only sendFailure, as discardedForSize bring small amount of problems "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def getKey(dictionary, key):\n",
" return dictionary.get(key)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def distrReasonToFailureCount(data, key):\n",
" return data.map(lambda p: (p['payload/reason'], p['payload/sendFailure'])) \\\n",
" .filter(lambda pair: pair[1] != None) \\\n",
" .map(lambda pair: (pair[0], getKey(pair[1], key))) \\\n",
" .filter(lambda pair: pair[1] != None) \\\n",
" .groupByKey() \\\n",
" .map(lambda pair: (pair[0], sum(pair[1]))) \\\n",
" .collect()\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nVXGuoKuqbpXh1uwPaq39dNXdW95/znCbawAAAABIksdmuDHhouYd0bUuyc8l2TQu8p4keya5X1X9\nXpK9Zyz4fmGSg6bKDkpy6azRXKOvJclb3vKWHH744XN2EQbr16/Phg0bdnU3gOs5P4uAXc3PIWB3\n4GcR18S5556bxz3uccmYFy1l3qDrg0nuOlX2hiTnJnnRInc1/ESSh0yVHTuWL2Zrkhx++OFZu3bt\nnF2EwZo1a1w/wC7nZxGwq/k5BOwO/CxiB1l2eau5gq7W2o+TfGGyrKp+nOS7rbVzx+cvSHLL1toJ\nY5VTkjy1ql6c5HVJHpjk+CTHzbNvAAAAAFjKau+6OGl6FNchSQ678sXWvpbkoUkelOScJOuTnNRa\nm74TIwAAAACs2tx3XZzWWvvVqecnzqhzZob1vQAAAADgWrEjRnTBbmlhYWFXdwHAzyJgl/NzCNgd\n+FnEzlKz14/ftapqbZKzzz77bIvVAQAAAFyPbdq0KevWrUuSda21TUvVNaILAAAAgC4IugAAAADo\ngqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAA\nAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4I\nugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAA\ngC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqAL\nAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADo\ngqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADowl67ugMAAAAwbfPmzbnkkkt2dTeAGQ488MDc\n+ta33tXdmEnQBQAAwG5l8+bNufOdD8/WrZft6q4AM+yzz41z3nnn7pZhl6ALAACA3coll1wyhlxv\nSXL4ru4OsJ1zs3Xr43LJJZcIugAAAGDlDk+ydld3ArgOsRg9AAAAAF0QdAEAAADQBUEXAAAAAF0Q\ndAEAAADQBUEXAAAAAF0QdAEAAADQBUEXAAAAAF2YK+iqqidX1Weqasv4+HhVPXiJ+kdX1RVTj8ur\n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\n7qCrqo6qqndX1Ter6oqqetgy9Y8e600+Lq+qW6y+2wAAAACwvdWM6No3yTlJnpKkrbBNS3LHJAeP\nj0NaaxevYt8AAAAAMNNe8zZorZ2a5NQkqaqao+l3WmuXzrs/AAAAAFiJnbVGVyU5p6q+VVWnVdW9\nd9J+AQAAALie2BlB17eTPCnJo5I8MskFSc6oqiN3wr4BAAAAuJ6Ye+rivFpr5yc5f6Lok1V1+yTr\nk5ywVNv169dnzZo125UtLCxkYWFhh/cTAAAAgF1r48aN2bhx43ZlW7ZsWXH7az3oWsRZSe6zXKUN\nGzZk7dq1O6E7AAAAAOxqswY4bdq0KevWrVtR+521Rte0IzNMaQQAAACAHWLuEV1VtW+SO2RYYD5J\nbldVRyT5Xmvtgqp6YZJDW2snjPWfnuSrST6fZJ8kT0zygCTH7ID+AwAAAECS1U1dvFuSDydp4+Ol\nY/kbk/xOkoOTHDZR/4ZjnUOTXJbks0ke2Fo7c5V9BgAAAICrmTvoaq19JEtMeWytnTj1/CVJXjJ/\n1wAAAABg5XbVGl0AAAAAsEMJugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqAL\nAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADo\ngqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAA\nAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4I\nugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAA\ngC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqAL\nAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADo\ngqALAAAAgC4IugAAAADogqALAAAAgC4IugAAAADogqALAAAAgC7MHXRV1VFV9e6q+mZVXVFVD1tB\nm/tX1dlVtbWqzq+qE1bXXQAAAACYbTUjuvZNck6SpyRpy1WuqtsmeU+SDyU5IsnLkry2qo5Zxb4B\nAAAAYKa95m3QWjs1yalJUlW1giYnJ/lKa+0Z4/Pzquq+SdYn+cC8+wcAAACAWXbGGl33TPLBqbL3\nJ7nXTtg3AAAAANcTOyPoOjjJRVNlFyXZv6r23gn7BwAAAOB6YO6pizvT+vXrs2bNmu3KFhYWsrCw\nsIt6BAAAAMC1ZePGjdm4ceN2ZVu2bFlx+50RdF2Y5KCpsoOSXNpa+8lSDTds2JC1a9deax0DAAAA\nYPcxa4DTpk2bsm7duhW13xlTFz+R5IFTZceO5QAAAACwQ8w9oquq9k1yhyTb7rh4u6o6Isn3WmsX\nVNULkxzaWjthfP2UJE+tqhcneV2G0Ov4JMdd494DdGbz5s255JJLdnU3gEUceOCBufWtb72ruwEA\nwCJWM3Xxbkk+nKSNj5eO5W9M8jsZFp8/bFvl1trXquqhSTYkeVqSbyQ5qbU2fSdGgOu1zZs35853\nPjxbt162q7sCLGKffW6c8847V9gFALCbmjvoaq19JEtMeWytnTij7MwkK5tMCXA9dckll4wh11uS\nHL6ruwNczbnZuvVxueSSSwRdAAC7qd36rosA10+HJ3EjDgAAgHntjMXoAQAAAOBaJ+gCAAAAoAuC\nLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAA\noAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgC\nAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6\nIOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAA\nAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuC\nLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAA\noAuCLgAAAAC6IOgCAAAAoAuCLgAAAAC6IOgCAAAAoAuCLgAAgP/b3p1HW1aWdx7//opBRCKKBZQo\nytAo2CgUiIgjQwDtRI1AQiosZVJCjBNgbCNEWrCX2kyBpaItyNDB6mAHCRoUIqhxQpR5RobCmYKE\nKRQyPv3HPmUdLvcWdYt7zqb2/n7Wuqv2effe9/7+0M05z3nf55UkdYKFLkmSJEmSJHWChS5JkiRJ\nkiR1goUuSZIkSZIkdcJyFbqS/HWSW5M8kOSiJNss5do3Jnlsws+jSdZZ/tiSJEmSJEnS40270JVk\nT+AY4HBgLnAFcF6S2Uu5rYBNgDmDn+dX1cLpx5UkSZIkSZImtzwzug4CvlBVp1fV9cCBwCJgvye5\n746qWrj4Zzn+riRJkiRJkjSlaRW6kqwCbA1csHisqgr4FrDd0m4FLk/y6yTnJ3nN8oSVJEmSJEmS\npjLdGV2zgZWA2yeM306zJHEyvwH+Etgd2A34BfCdJFtO829LkiRJkiRJU1p51H+gqm4EbhwauijJ\nxjRLIPde2r0HHXQQa6655uPG5s2bx7x582Y8pyRJkiRJkto1f/585s+f/7ixe+65Z5nvn26h607g\nUWDdCePrAr+dxu+5GHjtk1103HHHsdVWW03j10qSJEmSJGlFNdkEp0svvZStt956me6f1tLFqnoY\nuATYafFYkgxe/3Aav2pLmiWNkiRJkiRJ0oxYnqWLxwKnJrmEZmbWQcDqwKkAST4JrFdVew9efwC4\nFbgGWA14N7ADsPNTDS9JkiRJkiQtNu1CV1WdmWQ2cATNksXLgV2r6o7BJXOA9YduWRU4BlgPWARc\nCexUVf/2VIJLkiRJkiRJw5arGX1VfQ743BTn9p3w+ijgqOX5O5IkSZIkSdKymlaPLkmSJEmSJOnp\nykKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIk\nSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpck\nSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrB\nQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJ\nkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJ\nkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFC\nlyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmS\nOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmS\nJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKX\nJEmSJEmSOsFClyRJkiRJkjrBQpckSZIkSZI6wUKXJEmSJEmSOmG5Cl1J/jrJrUkeSHJRkm2e5Prt\nk1yS5HdJbkyy9/LFlZbd/Pnz244gSYDPIknt8j2RpKcHn0Uaj2kXupLsCRwDHA7MBa4Azksye4rr\nNwC+DlwAbAEcD5yUZOfliywtG9/USXp68FkkqV2+J5L09OCzSOOxPDO6DgK+UFWnV9X1wIHAImC/\nKa7/K+CWqvpwVd1QVZ8F/t/g90iSJEmSJEkzYlqFriSrAFvTzM4CoKoK+Baw3RS3vXpwfth5S7le\nkiRJkiRJmrbpzuiaDawE3D5h/HZgzhT3zJni+mcnecY0/74kSZIkSZI0qZXbDjCF1QCuu+66sf7R\nO+64gzvvvHOsf1Oj88tf/pIzzjij7RiaIbNnz2bttdduO8ZILXnmnQuM9/mnUfol4LOoG24Fxv/+\npA2+J+oW3xN1Sx/eE4Hvi7rJ90TdMf73REN/a7UnuzbNysNlM1i6uAjYvarOGRo/FVizqt4+yT3f\nBS6pqoOHxvYBjquq507xd/4C/x8gSZIkSZKkJfaqqi8v7YJpzeiqqoeTXALsBJwDkCSD1ydMcduP\ngDdPGNtlMD6V84C9gAXA76aTUZIkSZIkSZ2yGrABTb1oqaY1owsgyZ8Bp9Lstngxze6JewCbVtUd\nST4JrFdVew+u3wC4Cvgc8CWaotjfA/+tqiY2qZckSZIkSZKWy7R7dFXVmUlmA0cA6wKXA7tW1R2D\nS+YA6w9dvyDJHwHHAe+nWZi7v0UuSZIkSZIkzaRpz+iSJEmSJEmSno5mtR1AkiRJkiRJmgkWuiRJ\nkiRJktQJFrokSZIkSZLUCRa6JEmSJEmS1AnT3nVRejpJ8oplvbaqrhxlFkmaKMlqVfW7tnNI6p8k\nKwPbAxsDX66q+5KsB9xbVf/ZajhJvZFkE2AHYB0mTLSpqiNaCaXOc9dFrdCSPAYUkMG/U6qqlcYS\n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\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fed1c37dad0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plotlistofTuples(distrReasonToFailureCount(cachedData, 'eChannelOpen'), \\\n",
" title='eChannelOpen Failures distribution per reason')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Most pings with reason with sendFailure = \"eChannelOpen\" (Can't open channel error) have reason \"shutdown\", which could be because network is shouted down before getting signal of shutdown on client side."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n9rVhltX2837jv2+dsWxL0sahhJN3GJ2+Bq3miqnnR2boSXVGkllzv+3xOaxhLsRfSHJc9vzOcNnE\nf89z3h6dIeydNnnsJ9c5feyXhpHPe+wBuI07oIOu1tq5Sc5NbvoVag9VdYcMcx88NcMfz59I8vzW\n2p+Py1+f4ZfGpfoPzDBvwE/c4o0HYG8t9To+O8PcP7N8fPx36Uv+HZepd6eJOpOW+4I+qyfM9Bfk\npfb9Zob5aWZZ+rL7K0lekmEo5q9mGHZ5Y4Z5qtbau3q1tq93+6bdLsnVGebMmnV8ZwVBC6mqRyV5\nZ4YftZ6TYX6ibyV5doYv44taLuw5aJny6XMkGfb13CSvXGaZS5OktXbV+HfKD2ToAXNykh+vqte3\n1p49f5Pn11r7RlU9MkNvusdn6NW0JUNYMd3DaTmz9nmvm7ZM+XLH/ZawyLVhLZY+V8/NMN/YLNPH\ndtFjvdw1680Zrquz/G2SVNUzMvzQ/PYM8/tdm+GYvCDJvZYqr3DevqG19qwF27vklj72AHTugA66\n5vB7Sf5thol1r8zQHfvPquq7W2ufnlH/WRl+Kb9gxmsAHFiuzTBB/EGttQ+uUvez47/HLfP6cRN1\n9pXPjP9+a472PTnJB1tre/zQMg6tmwx4Pp3kIVV10IK9ZPZX+5bcf0bZ/TJ+SV7GpzPMwXNBW3nC\n+r1xSobhZT84efyqalaPwHl8OcMPadPuk2Her3l8Jslhc7wHS0NI3z0+UlX/PUNo8NLJYXRTPpvk\nkVV16FSvrn87T+PGnlsfHB+/WFUvSPKiqvre1tqHM9+k/YvY49wZf8g8NsME6UvmPe6LtO2zSU6s\nqjtO9eraOPH6vrTafi79nXrdPOfGPnJVhs/H7ea8JlzaWvuRycKqetl0xRXO25eM5+2OzL4231LH\nHoDbuAN6jq6VVNW9M9yx5Ydbaxe01i5vrb0qw912bnbb+ao6JMOvyK/brw0FYE3G4XvnJHnyePfA\nPVTV4RN1r8ow1P3pVbVhqt7mJA9L8p593L5rMwzH+cnxrmLLti9DD4Waev2HM9EzYnROkn+d5GcO\n0PYt+bGquvNU3aOy8jF+W4Yf2P7r9AtVddD0+7ZGN2ToiXZTz5+qOibDRP1r8ekkD6+qyfU9McO+\nTlsudHlbhoDl+6dfqKq71XCnzYzzok37xPjvITNeW/Ke8fWbwryxvT+zQpuW6s3a5lJYubTNpaFz\n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\nx1GttWsWby4AAAAAzLaWHl1bk/xBa+0trbVPJXlOkuuT/Pgqy13bWrtm6bGG7QIAAADAshYKuqrq\n9kk2J/nAUllrrSV5f5KHr7Rokour6gtVdV5VPWItjQUAAACA5Szao+vwJAcluXqq/OoMQxJnuTLJ\nTyZ5cpJTknwuyflVdfyC2wYAAACAZR18S2+gtXZZkssmiv6yqo7NMATytJWW3bp1azZs2LBH2ZYt\nW7Jly5Z93k4AAAAA1te2bduybdu2Pcp27do19/KLBl07k9yQ5Iip8iOSXLXAei5McsJqlc4666xs\n2rRpgdUCAAAAcGs1q4PT9u3bs3nz5rmWX2joYmvtW0kuSvLopbKqqvH5BQus6vgMQxoBAAAAYJ9Y\ny9DFVyV5U1VdlKFn1tYkd0rypiSpqpcnuWdr7bTx+c8nuTzJJ5McmuTZSR6V5LF723gAAAAAWLJw\n0NVae1tVHZ7kJRmGLF6c5Adaa9eOVY5Mcu+JRe6Q5JVJ7pnk+iQfT/Lo1tqH96bhAAAAADBpTZPR\nt9Zek+Q1y7x2+tTzM5OcuZbtAAAAAMC8FpqjCwAAAAAOVIIuAAAAALog6AIAAACgC4IuAAAAALog\n6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAA\nALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4Iu\nAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACg\nC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIA\nAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog\n6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAA\nALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4Iu\nAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACgC4IuAAAAALog6AIAAACg\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fed0fc16190>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plotlistofTuples(distrReasonToFailureCount(cachedData, 'eUnreachable'), \\\n",
" title='eUnreacheable Failures distribution per reason')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n/z8n+bvBtnm/t4Oagwbbtk1yUZKbk/zExLO7MclPDmp/vT9+/2l+N7y8vLy8vLbGy9BUAHjwa+l6\nsw1d1P+8d3vrepJckuTxg7qD0vWc+2xV/dTMK12Psv9It6BB0gVzD0lywsR1Ppzk1iQHLsJ9LERL\n1+PtVwavF25S0NodM/9cVTv19/OPSX6uqhbSi+i+OLO19t2JbQcluSLJNRPP+O/T9faZecYzx/36\nlNd8cbrn8oGJ7Sdk/vndvtvX/FpVbTvldYc+NEXtJ1pr35p501r7UrreVC/e/CGLYuY5HT+x/U/T\nPYPJ7/BXWmszv0dprd2U5P9k09+fucx5n1W1S5J9k5yZZOfBd2OXdD0Ml1fVTw/O19L1Xp3GX7Qf\nnlfyoHQB4K0T38fz0v2OP3fQ5uHv0s5Jdk63KMaeg/Mt5Hv7oiT/2lo7a3Duu5P8WZKdhtfsndFa\n+4/B+wvTfUYLffYAsNUYmgoAPx7WTbzf0P/8+izbHzF4/6R0/3H9rfywlm74WpLs1v+8epOC1r5f\nVdemG3I2ln9qcyzWUFXPTfKH6YaC7jjY1ZIsSTdU7/5y/SzbnpTkifnB8OKh4TM+I8nrkvxFVf1J\numDkr5P8dWttrmG0j01yV2ttcs6wqxbQ3vOT/E26IcJvqap/SPL/JlndFr6y6h2ttRsXWJsk/zLL\ntquTvHSKc2yJmed0zXBja+1fq+rW/PB3ePJ3Kul6bz1ilu2zme8+n9T/fE+S985SO/PdGH5vrl/g\nteeqf1KS5Zn/+5iq+rUk70g3lHqHQd3wu7GQ7+1jM/FnR29tuoBt8tlP/rl1c/9zoc8eALYaQRwA\n/HjY3AqVs20f9pLaJslN6eZ+mq331Gz/sT6fzYVG26abs+1+U1VPSjcM9cokK9P9B/2d6eY8OyLT\nL2Q1173MZraQb5t085a9JbM/43VJ0lr7XlU9J10PuQOT/GqSFenm5PvVKdq8YH1Q8vKq2ifJS5Ic\nkG4+tN+tql9urS0ktLw/VuKc9rnfHzb3O7Wlq/1Omvkuvi9deDWbyXB12hB5tvpK8ul0PQFnc1WS\nVNUL0oW05yf5nXTDRb+fbh7El88U30/f2/v72QPA/UYQBwAPPAtZRGCxXJNuPqkvDIehzeKG/uey\nDHrZ9KtN7p4u/Jpxc7pedpMe219vxv1xn7+Wbnjdgf1Qwpl2HrCF57s5yc/Msn2aHoDXJFnWWvv7\n+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\nQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEA\nAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAA\nwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQ\nxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcA\nAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAA\njEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJB\nHAAAAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAA\nAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADA\nCARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwgqmCuKr6nar6clVt6F9fqKpf\nnag5pqq+WVW3V9VnquqJE/t3qKqTqmp9Vd1aVWdV1aMmah5RVR/vr3FzVZ1SVQ+bqHlMVZ1dVbdV\n1Y1VdWxVbTNRs0dVXVBV36uqG6rqrbPc0/Or6tKq2lhVV1fVIdM8EwAAAABYiGl7xH09yduT7Jlk\nryTnJ/lkVS1Pkqp6e5I3JXl9kr2T3JZkTVVtPzjHCUkOTPLyJPsmeXSST0xc54wky5Ps19fum+Tk\nmZ194HZOku2S7JPkkCSvSXLMoObhSdYkua5v71uTrKqqwwY1j0vyqSSfTfLUJO9PckpVvXDK5wIA\nAAAAc9pumuLW2tkTm95ZVYenC8PWJjkqybtba59Kkqp6dZKbkrwsyZlVtVOS1yV5ZWvtH/ua1yZZ\nW1V7t9Yu7kO9A5Ls1Vq7vK85IsnZVfWW1tqN/f6fT/KC1tr6JFdU1buSvLeqVrXW7kpycJKHJDm0\nf7+2qp6W5M1JTunbf3iSa1trb+vfX1VVz0myMslnpnk2AAAAADCXLZ4jrqq2qapXJtkxyReqavck\nu6brXZYkaa3dkuSiJM/qNz09Xfg3rLkqybpBzT5Jbp4J4XrnJWlJnjmouaIP4WasSbIkyZMHNRf0\nIdywZllVLRnUnDdxa2sGbQEAAACARTF1EFdVv1hVtya5I8mfJ/n1PkzbNV1YdtPEITf1+5JkaZI7\n+4BuczW7JvnWcGdr7e4k35mome06WaSanapqhwAAAADAIplqaGrva+nmU1uS5KAkH6uqfRe1Vfev\nWqwTrVy5MkuWLNlk24oVK7JixYrFugQAAAAAPyJWr16d1atXb7Jtw4YNCz5+6iCuH+p5bf/28qra\nO93ccMemC7mWZtNeZkuTzAwzvTHJ9lW100SvuKX9vpmayVVUt03yyImaZ0w0belg38zPpbPUtAXU\n3NJauyPzOP7447PnnnvOVwYAAADAg8BsHbAuu+yy7LXXXgs6fovniJs4xw6ttevSBVv7zezoF2d4\nZpIv9JsuTXLXRM2yJLsl+WK/6YtJdu4XVpixX7qQ76JBzVOqapdBzf5JNiT56qBm3z7EG9Zc1Vrb\nMKjZL5vaf9AWAAAAAFgUUwVxVfXHVfXcqnpsP1fce5I8L8npfckJ6VZSfWlVPSXJx5J8I8knk3sX\nb/hIkuOq6vlVtVeSU5N8vrV2cV/ztXQLJny4qp5RVc9O8oEkq/sVU5Pk3HSB22lVtUdVHZDk3UlO\nbK19v685I8mdSU6tql+oqlckOTLJnw5u6UNJHl9V76uqZVX1hnTDbY+b5rkAAAAAwHymHZr6qCR/\nmeRn0vU++0qS/Vtr5ydJa+3YqtoxyclJdk5yYZIXtdbuHJxjZZK7k5yVZIckn07yxonrvCrJielW\nNL2nrz1qZmdr7Z6qekmSD6brbXdbko8mOXpQc0tV7Z/kpCSXJFmfZFVr7SODmuur6sAkx6cL6b6R\n5NDW2uRKqgAAAABwn0wVxLXWDltAzaokq+bYf0eSI/rX5mq+m+Tgea7z9SQvmafmynQ99uaquSDJ\nwgbyAgAAAMAWWow54gAAAACAeQjiAAAAAGAEgjgAAAAAGIEgDgAAAABGIIgDAAAAgBEI4gAAAABg\nBII4AAAAABiBIA4AAAAARiCIAwAAAIARCOIAAAAAYATbbe0GAACLb926dVm/fv3WbgbAotlll12y\n2267be1mAMB9IogDgAeZdevWZdmy5dm48fat3RSARfPQh+6Yq65aK4wD4AFNEAcADzLr16/vQ7jT\nkyzf2s0BWARrs3HjwVm/fr0gDoAHNEEcADxoLU+y59ZuBAAA0LNYAwAAAACMQBAHAAAAACMQxAEA\nAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAA\nIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQ\nBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAA\nAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAw\nAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADACARx\nAAAAADACQRwAAAAAjEAQBwAAAAAjEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAA\nAMAIBHEAAAAAMAJBHAAAAACMQBAHAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAj\nEMQBAAAAwAgEcQAAAAAwAkEcAAAAAIxAEAcAAAAAIxDEAQAAAMAIBHEAAAAAMAJBHAAAAACMQBAH\nAAAAACMQxAEAAADACARxAAAAADACQRwAAAAAjEAQBwAAAAAjmCqIq6rfr6qLq+qWqrqpqv6mqn5u\nlrpjquqbVXV7VX2mqp44sX+HqjqpqtZX1a1VdVZVPWqi5hFV9fGq2lBVN1fVKVX1sImax1TV2VV1\nW1XdWFXHVtU2EzV7VNUFVfW9qrqhqt46S3ufX1WXVtXGqrq6qg6Z5rkAAAAAwHym7RH33CQfSPLM\nJL+S5CFJzq2qn5gpqKq3J3lTktcn2TvJbUnWVNX2g/OckOTAJC9Psm+SRyf5xMS1zkiyPMl+fe2+\nSU4eXGebJOck2S7JPkkOSfKaJMcMah6eZE2S65LsmeStSVZV1WGDmscl+VSSzyZ5apL3Jzmlql44\n1ZMBAAAAgDlsN01xa+3Fw/dV9Zok30qyV5LP9ZuPSvLu1tqn+ppXJ7kpycuSnFlVOyV5XZJXttb+\nsa95bZK1VbV3a+3iqlqe5IAke7XWLu9rjkhydlW9pbV2Y7//55O8oLW2PskVVfWuJO+tqlWttbuS\nHJwuLDy0f7+2qp6W5M1JTunbe3iSa1trb+vfX1VVz0myMslnpnk+AAAAALA593WOuJ2TtCTfSZKq\n2j3Jrul6lyVJWmu3JLkoybP6TU9PFwAOa65Ksm5Qs0+Sm2dCuN55/bWeOai5og/hZqxJsiTJkwc1\nF/Qh3LBmWVUtGdScN3FfawZtAQAAAID7bIuDuKqqdENMP9da+2q/edd0YdlNE+U39fuSZGmSO/uA\nbnM1u6braXev1trd6QK/Yc1s18ki1exUVTsEAAAAABbBVENTJ/x5kl9I8uxFasuYajFOsnLlyixZ\nsmSTbStWrMiKFSsW4/QAAAAA/AhZvXp1Vq9evcm2DRs2LPj4LQriqurEJC9O8tzW2r8Ndt2YLuRa\nmk17mS1NcvmgZvuq2mmiV9zSft9MzeQqqtsmeeREzTMmmrZ0sG/m59JZatoCam75/9u792hby7pe\n4N/fRpHQFI2AOscbVqApty2iwxtKQR5vpXYMLe+VmaR46VRSEDRGWgppGjkUA0s4x1NmpiaWZpqR\nHAVLFDRu3oUoBALiIr/zx5xbJsu9N3MT+3nX2vvzGWONNefzPnOv715/7LnXdz3P+3T3ddmME044\nIQcccMDmpgAAAACwjdjYAqyzzjor69evX+r1W7w1dV7CPTmzQxK+tHituy/KrNg6ZGH+XTO7r9s/\nzIc+leTGFXP2SnKvJGfMh85Issv8YIUNDsms5PvEwpwHVdWuC3MOTXJFks8tzHnUvMRbnPP57r5i\nYc4huaVDF7IAAAAAwH/ZFhVxVfUHSZ6Z5BlJrq6q3ecfOy1M+70kR1XVE6vqQUnenuQrSf4i+fbh\nDSclOb6qDq6q9UneluTj3X3mfM55mR2Y8JaqOrCqHp7k95OcNj8xNUk+mFnh9sdVtU9VHZbkuCRv\n7O4b5nNOTXJ9krdV1QOq6ulJfinJ6xby/mGSPavqNVW1V1W9KMnTkhy/Jd8bAAAAANicLd2a+sLM\ntnV+ZMX4czMr3NLdv1NVOyd5c2anqn4syeO6+/qF+Ucm+VaSP01ypyQfSPKLK/7MZyR5Y2Ynmt40\nn/uSDRe7+6aqekKSEzNbbXd1kpOTHL0w58qqOjTJm5J8MsllSY7p7pMW5lxcVY9PckJmJd1Xkjy/\nu1eepAoAAAAAt9kWFXHdvdQKuu4+Jskxm7l+XZIj5h+bmvPNJD99K1/ny0mecCtzzkny6FuZ89Ek\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fed1c28d1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plotlistofTuples(distrReasonToFailureCount(cachedData, 'timeout'), \\\n",
" title='timeout Failures distribution per reason')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# OS distribution Beta"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def osDistr(cachedData): \n",
" distr = cachedData.map(lambda p: p['payload/os']).filter(lambda p: p != None).map(lambda p: p.get('name'))\n",
" result = Counter(distr.collect()).items()\n",
" plotlistofTuples(result)\n",
" print result"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(u'WINNT', 28052038), (u'Android', 2848367), (u'Darwin', 118220), (u'Linux', 60411)]\n"
]
},
{
"data": {
"image/png": "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\niAw/o5MAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fec75812150>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"osDistr(cachedData)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Most of the pings submitted from Windows. Probably if we have networking problems, it is somehow connected to os."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"# Client distribution by country distribution"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def unique_by_key(elements, key=None):\n",
" if key is None:\n",
" # no key: the whole element must be unique\n",
" key = lambda e: e\n",
" return {key(el): el for el in elements}.values()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "itemgetter expected 1 arguments, got 2",
"output_type": "error",
"traceback": [
"\u001b[0;31m\u001b[0m",
"\u001b[0;31mTypeError\u001b[0mTraceback (most recent call last)",
"\u001b[0;32m<ipython-input-11-84f1c41d702c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcachedData\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"meta/geoCountry\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"clientId\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupByKey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msorted\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdate\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mitemgetter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: itemgetter expected 1 arguments, got 2"
]
}
],
"source": [
"date = cachedData.map(lambda p: (p[\"meta/geoCountry\"], p[\"clientId\"])).groupByKey()\n",
"result = sorted(date.map(lambda p: (p[0], len(set(p[1])))).collect(), key=itemgetter(1))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pingsPerDaySeries = pd.Series([y for x, y in result])\n",
"quantile05 = pingsPerDaySeries.quantile(0.75)\n",
"plotlistofTuples([(x, y) for x, y in result if y > quantile05])\n",
"plt.title(\"Health ping users per country distribution (Plot represents only conuntries with uusers more that 0.5 quantile)\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"quantile75 = pingsPerDaySeries.quantile(0.75)\n",
"plotlistofTuples([(x, y) for x, y in usersPerClient if y > quantile05])\n",
"plt.title(\"Health ping users per country distribution (Plot represents only conuntries with uusers more that 0.75 quantile)\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"Most of the clients submitting health png from India (not US), \n",
"but turns out that currenlty in Beta we have more users from India. https://sql.telemetry.mozilla.org/queries/27098/source\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pings.first()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"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": 1
}
# coding: utf-8
# In[1]:
import ujson as json
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import plotly.plotly as py
import pandas as pd
from plotly.graph_objs import *
from moztelemetry import get_pings_properties, get_one_ping_per_client
from moztelemetry.dataset import Dataset
from collections import Counter
import operator
from operator import itemgetter
get_ipython().magic(u'matplotlib inline')
# In[ ]:
pings = Dataset.from_source("telemetry") .where(docType='health', appUpdateChannel="beta") .records(sc, sample=1)
cachedData = get_pings_properties(pings, ["creationDate", "payload/pingDiscardedForSize", "payload/sendFailure",
"clientId", "meta/submissionDate", "payload/os", "payload/reason",
"meta/geoCountry", "application/version"]).cache()
# In[ ]:
import matplotlib.dates as mdates
def plotlistofTuples(listOfTuples, title="", inColor='blue'):
keys = [t[0] for t in listOfTuples]
values = [t[1] for t in listOfTuples]
plt.figure(1)
fig = plt.gcf()
fig.set_size_inches(15, 7)
plt.title(title)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.bar(range(len(listOfTuples)), values, align='center', color=inColor)
plt.xticks(range(len(listOfTuples)), keys, rotation=90)
# # Correlation between sendFailure count and Health ping reason
# analyse only sendFailure, as discardedForSize bring small amount of problems
# In[11]:
def getKey(dictionary, key):
return dictionary.get(key)
# In[12]:
def distrReasonToFailureCount(data, key):
return data.map(lambda p: (p['payload/reason'], p['payload/sendFailure'])) .filter(lambda pair: pair[1] != None) .map(lambda pair: (pair[0], getKey(pair[1], key))) .filter(lambda pair: pair[1] != None) .groupByKey() .map(lambda pair: (pair[0], sum(pair[1]))) .collect()
# In[17]:
plotlistofTuples(distrReasonToFailureCount(cachedData, 'eChannelOpen'), title='eChannelOpen Failures distribution per reason')
plt.show()
# Most pings with reason with sendFailure = "eChannelOpen" (Can't open channel error) have reason "shutdown", which could be because network is shouted down before getting signal of shutdown on client side.
# In[18]:
plotlistofTuples(distrReasonToFailureCount(cachedData, 'eUnreachable'), title='eUnreacheable Failures distribution per reason')
plt.show()
# In[20]:
plotlistofTuples(distrReasonToFailureCount(cachedData, 'timeout'), title='timeout Failures distribution per reason')
plt.show()
# # OS distribution Beta
# In[34]:
def osDistr(cachedData):
distr = cachedData.map(lambda p: p['payload/os']).filter(lambda p: p != None).map(lambda p: p.get('name'))
result = Counter(distr.collect()).items()
plotlistofTuples(result)
print result
# In[35]:
osDistr(cachedData)
# Most of the pings submitted from Windows. Probably if we have networking problems, it is somehow connected to os.
# # Client distribution by country distribution
# In[4]:
def unique_by_key(elements, key=None):
if key is None:
# no key: the whole element must be unique
key = lambda e: e
return {key(el): el for el in elements}.values()
# In[11]:
date = cachedData.map(lambda p: (p["meta/geoCountry"], p["clientId"])).groupByKey()
result = sorted(date.map(lambda p: (p[0], len(set(p[1])))).collect(), key=itemgetter(1))
# In[ ]:
pingsPerDaySeries = pd.Series([y for x, y in result])
quantile05 = pingsPerDaySeries.quantile(0.75)
plotlistofTuples([(x, y) for x, y in result if y > quantile05])
plt.title("Health ping users per country distribution (Plot represents only conuntries with uusers more that 0.5 quantile)")
# In[ ]:
quantile75 = pingsPerDaySeries.quantile(0.75)
plotlistofTuples([(x, y) for x, y in usersPerClient if y > quantile05])
plt.title("Health ping users per country distribution (Plot represents only conuntries with uusers more that 0.75 quantile)")
# In[ ]:
Most of the clients submitting health png from India (not US),
but turns out that currenlty in Beta we have more users from India. https://sql.telemetry.mozilla.org/queries/27098/source
# In[ ]:
pings.first()
# In[ ]:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment