BitTorrent Sync Project Statistics This page displays usage statistics from the repositories for the Packaging and GUI project for delivering and deploying BitTorrent Sync (aka btsync or syncapp) on Debian derived (Ubuntu, Linux Mint, Raspbian, etc.) Linux workstations and servers

Package Download Statistics

The BitTorrent Sync Packaging Project was started in February 2013 with the attempt to create a standard deployment for our servers. In April 2013 the beta phase was started but there was still no easy to use standard solution for Linux users and then I decided to make the result of my work available for everybody in order to promote the use of BitTorrent Sync in the Linux world.

The success of the first release of the packages was overwhelming and the tons of positive and constructive feedback in the forum pushed me to improve and extend the project from day to day.

After one year I can look back on some great achievements:

  • Thanks to the feedback from many forum members and the collaboration of many volunteers, the BitTorrent Sync Server Package (btsync) is now available in 13 languages and provides an incredible feature set in comparison to the first release.
  • Thanks to the collaboration with Mark Johnson, the BitTorrent Sync Desktop Package (btsync-user) became the state-of-the-art desktop solution for using BitTorrent Sync on Linux desktop machines.
  • Inspired by Mark Johnson, I decided to write the next generation solution for Linux: the BitTorrent Sync GUI Package (btsync-gui).
  • Over 2000 downloads during the first four weeks and the enthusiastic support from many volunteers that made it possible to create an international release supporting 7 languages.

Thank you all for your great appreciation! And here you can measure it in real numbers.

Statistics from the YeaSoft Repository

The repository was created on May 9, 2013 in order to provide packages also for non-Ubuntu users and users of machines with architectures not supported by Launchpad. Since all the log files were still available, it was quite easy to write some lines of code that processed all historical data and collect live data from the web server.

The following graph shows the downloads figures of the individual packages. Click on the graph to see other time intervals (last day, last week, last month, last quarter, last year).

Downloads by Package from YeaSoft - last month

Figure 1: Downloads by Package from YeaSoft

The following graph shows the downloads figures of the architecture specific BitTorrent Sync binary package. Click on the graph to see other time intervals (last day, last week, last month, last quarter, last year).

Downloads by Architecture from YeaSoft - last month

Figure 2: Downloads by Architecture from YeaSoft

Statistics from the Launchpad PPA

The BitTorrent Sync Launchpad PPA was the initial distribution point for the packages and still the most used, since many bloggers and writers of help and support articles refer to it. Unfortunately I did not knew, how to extract the usage data from there up to March 26, 2014 when Alin Andrej from web upd8 told me about the Launchpad API and how to retrieve data from it. BTW: Thank you a lot for your great article and your suggestions!

The data displayed in the following graphs starts at March 26, 2014 17:30. Nevertheless it is possible to compute raw historical figures about all versions of all packages. If you interested in the raw data, you can download it here. The data is updated once per day.

The following graph shows the downloads figures of the individual packages. Click on the graph to see other time intervals (last day, last week, last month, last quarter, last year).

Downloads by Package from YeaSoft - last month

Figure 3: Downloads by Package from the Launchpad PPA

The following graph shows the downloads figures of the architecture specific BitTorrent Sync binary package. Click on the graph to see other time intervals (last day, last week, last month, last quarter, last year).

Downloads by Architecture from the Launchpad PPA - last month

Figure 4: Downloads by Architecture from the Launchpad PPA

Nerd Stuff

The data is taken from the PPA and imported into an RRD database every 30 minutes (unfortunately Launchpad does not provide more granular data) with this small Python program:

#!/usr/bin/env python
#
# (c) 2014 YeaSoft Int'l - Leo Moll
#
# VERSION 20140326
# This script updates the rrd databases from Launchpad PPA data

import os
import sys
import rrdtool

from launchpadlib.launchpad import Launchpad

BASEPATH='/mnt/data/debian/'

RRDFILE=BASEPATH+'databases/btsyncppa.rrd'
IMGPATH=BASEPATH+'repos/stats/'

# check if the database already exists
if not os.path.isfile(RRDFILE):
    # sample rate: 30 minutes (1800)
    rrdtool.create(
        RRDFILE,
        '--step', '1800',
        [
            'DS:btsync-common:DERIVE:86400:0:U',
            'DS:btsync-server:DERIVE:86400:0:U',
            'DS:btsync-user:DERIVE:86400:0:U',
            'DS:btsync-gui:DERIVE:86400:0:U',
            'DS:arch-sum:DERIVE:86400:0:U',
            'DS:arch-i386:DERIVE:86400:0:U',
            'DS:arch-amd64:DERIVE:86400:0:U',
            'DS:arch-armel:DERIVE:86400:0:U',
            'DS:arch-armhf:DERIVE:86400:0:U',
            'DS:arch-powerpc:DERIVE:86400:0:U'
        ],
        'RRA:AVERAGE:0.5:1:4320',
        'RRA:AVERAGE:0.5:6:2920',
        'RRA:AVERAGE:0.5:24:2190'
    )
    # RRA resolution: 30 minutes - retention: 3 months (48*30*3=4320)
    # RRA resolution: 3 hours - retention: 1 year (8*365=2920)
    # RRA resolution: 12 hours - retention: 3 years (2*3*365=2190)

# connect to the PPA via the launchpad api
lpapi = Launchpad.login_anonymously('ppastats', 'edge', version='devel')
lpowner = lpapi.people['tuxpoldo']
lparchive = lpowner.getPPAByName(name='btsync')

# create an empty dictionary for collected data
dataset = {
}

# collect data from Launchpad
for distro in [ 'lucid', 'precise', 'quantal', 'saucy', 'trusty' ]:
    for arch in [ 'i386', 'amd64', 'armel', 'armhf' ]:
        coords = 'https://api.launchpad.net/devel/ubuntu/{0}/{1}'.format(distro,arch)
        try:
            for stats in lparchive.getPublishedBinaries(status='Published',distro_arch_series=coords):
                cfarch = arch if stats.architecture_specific else 'all'
                cfname = stats.binary_package_name+':'+stats.binary_package_version+':'+cfarch
                if dataset.get(cfname,None) is None:
                    dataset[cfname] = {
                        'name' : stats.binary_package_name,
                        'arch' : cfarch,
                        'count' : stats.getDownloadCount()
                    }
        except Exception:
            # print "Exception:"+distro+':'+arch
            pass

# initialize the counters for the consolidated data
counters = {
    'btsync-common' : 0,
    'btsync-server' : 0,
    'btsync-user' : 0,
    'btsync-gui' : 0,
    'arch-all' : 0,
    'arch-i386' : 0,
    'arch-amd64' : 0,
    'arch-armel' : 0,
    'arch-armhf' : 0,
    'arch-powerpc' : 0
}

# consolidate data
for index,value in enumerate(dataset):
    data = dataset[value]
    if data['name'] == 'btsync-common':
        counters['btsync-common'] += data['count']
        counters['arch-all'] += data['count']
        counters['arch-'+data['arch']] += data['count']
    elif data['name'] == 'btsync':
        counters['btsync-server'] += data['count']
    elif data['name'] == 'btsync-user':
        counters['btsync-user'] += data['count']
    elif data['name'] == 'btsync-gui-gtk':
        counters['btsync-gui'] += data['count']

# save the data into the RRD
rrdtool.update(
    RRDFILE,
    'N:{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}'.format(
        counters['btsync-common'],
        counters['btsync-server'],
        counters['btsync-user'],
        counters['btsync-gui'],
        counters['arch-all'],
        counters['arch-i386'],
        counters['arch-amd64'],
        counters['arch-armel'],
        counters['arch-armhf'],
        counters['arch-powerpc']
    )
)

The raw CSV formatted data is generated with this small Python program:

#!/usr/bin/env python
#
# (c) 2014 YeaSoft Int'l - Leo Moll
#
# VERSION 20140326
# This script outputs full statistics as CSV data from Launchpad PPA data
# Data format: 'Package,Version,Architecture,Status,Count'

import os
import sys

from launchpadlib.launchpad import Launchpad

# connect to the PPA via the launchpad api
lpapi = Launchpad.login_anonymously('ppastats', 'edge', version='devel')
lpowner = lpapi.people['tuxpoldo']
lparchive = lpowner.getPPAByName(name='btsync')

# create an empty dictionary for collected data
dataset = {
}

# collect data from Launchpad
for distro in [ 'lucid', 'precise', 'quantal', 'raring', 'saucy', 'trusty' ]:
    for arch in [ 'i386', 'amd64', 'armel', 'armhf' ]:
        coords = 'https://api.launchpad.net/devel/ubuntu/{0}/{1}'.format(distro,arch)
        for showstatus in [ 'Published', 'Superseded', 'Deleted', 'Obsolete' ]:
            try:
                for stats in lparchive.getPublishedBinaries(status=showstatus,distro_arch_series=coords):
                    cfarch = arch if stats.architecture_specific else 'all'
                    cfname = stats.binary_package_name+':'+stats.binary_package_version+':'+cfarch+':'+showstatus
                    if dataset.get(cfname,None) is None:
                        dataset[cfname] = {
                            'name' : stats.binary_package_name,
                            'version' : stats.binary_package_version,
                            'arch' : cfarch,
                            'status' : showstatus,
                            'count' : stats.getDownloadCount()
                        }
            except Exception:
                pass

# output collected data
for index,value in enumerate(dataset):
    data = dataset[value]
    print '{0},{1},{2},{3},{4}'.format(
        data['name'],
        data['version'],
        data['arch'],
        data['status'],
        data['count']
    )
Author:
This page was last updated on May 18, 2014, 17:50:24