Fabricio
pronounce as [f-ah-bree-see-oh]
A simple gem that fetches mobile application statistics from Fabric.io using its private not publicly opened API.
There is a possibility that in some point of time it may break. Feel free to post an issue and we'll fix it ASAP.
The Story Behind
Fabric.io is a great tool made for mobile application developers. It provides data about standard and out-of-memory crashes, active users, audience growth and a lot more. Unfortunately the only official way to work with this data is using Fabric.io website. That means - no automation and no integrations with other services.
We decided to fix this issue.
Key Features | |
---|---|
Hides the complexity of different Fabric.io APIs behind a simple wrapper. | |
Provides data about organization, applications and builds. | |
Shows crash- and out-of-memory- free metrics. | |
Automatically refreshes session in case of its expiration. | |
Provides a simple way of adding your adapter for storing session data in a database of your choice. |
Installation
Add this line to your application's Gemfile:
gem 'fabricio'
And then execute:
$ bundle
Or install it yourself as:
$ gem install fabricio
Quick Start
CLI
Commands
App
# Obtain all app
fabricio app all
# Obtain single app
fabricio app get --app_id 'app_id'
# Obtain active now count
fabricio app active_now --organization_id 'org_id' --app_id 'app_id'
# Obtain single issue
fabricio app single_issue --app_id 'app_id' --issue_id 'issue_id'
# Obtain single issue session
fabricio app issue_session --app_id 'app_id' --issue_id 'issue_id' --session_id 'session_id'
# Obtain latest issue session
fabricio app latest_session --app_id 'app_id'
Build
# Obtain all builds
fabricio build all --organization_id 'org_id' --app_id 'app_id'
# Obtain single build
fabricio build get --organization_id 'org_id' --app_id 'app_id' --version 'version' --build_number 'build_number'
Version
# Obtain all versions
fabricio version all --app_id 'app_id'
# Obtain top versions
fabricio version top --organization_id 'org_id' --app_id 'app_id' --start_time 'timestamp' --end_time 'timestamp'
Organization
# Obtain organization
fabricio organization all
Other
# Setup credential
fabricio credential
# Describe available commands or one specific command
fabricio help [COMMAND]
Example
> fabricio credential
Setup credential
We have to know you\'re email from fabric account
email: [email protected]
Now we want your password. Do not be afraid, it is stored locally
password:
Successful login to TestOrganization
> fabricio organization all
[{"id"=>"424423ac76fa54934e00a09b", "alias"=>"test", "name"=>"Test", "api_key"=>"19ac3e6195b1900ada120c1e0c1230a818626d55", "enrollments"=>{"answers_enhanced_feature_set_enabled_for_new_apps"=>"false", "answers_ip_address_tracking_enabled_for_new_apps"=>"true", "beta_distribution"=>"true"}, "accounts_count"=>100, "mopub_id"=>"11142", "sdk_organization"=>true, "apps_counts"=>{"ios"=>9}, "build_secret"=>"fdda1e597843e25731848bb46eec2cc893ea86847e22d5f44567ecd48ff4e32"}]
> fabricio app all
...
Default values
If your account have only one organization/app then it will be used by default and it is not necessary to set.
fabricio build all
Parsing
You can use jq
for parsing json
fabricio version all --app_id 'app_id' | jq 'sort_by(.major)[-1].synthesized_version' "14.0 (131)"
Code
- Create a
Fabricio::Client
object and configure it on initialization.
require 'Fabricio'
client = Fabricio::Client.new do |config|
config.username = 'your_email'
config.password = 'your_password'
end
- Use this client to query any data you want.
client.app.all # Returns all applications on your account
client.app.get(app_id: 'app_id') # Returns information about specific application
client.app.crashfree(app_id: 'app_id', start_time: '1478736000', end_time: '1481328000', build: 'all') # Returns application crashfree for a given period of time
client.organization.all # Returns information about your organizations
- If you want to check the exact server output for a model, you can call
json
method on it:
client.app.get(app_id: 'app_id').json
You can call a method similar to any key in this hash:
client.app.get(app_id: 'app_id').importance_level
Commands
Organization
client.organization.all
Obtains information about your organizations.
App
client.app.all
Obtains the list of all apps.
client.app.get(app_id: 'app_id')
Obtains a specific app.
client.app.active_now(organization_id: 'organization_id', app_id: 'app_id')
Obtains the count of active users at the current moment.
client.app.daily_new(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp')
Obtains the count of daily new users.
client.app.daily_active(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build')
Obtains the count of daily active users.
client.app.total_sessions(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build')
Obtains the count of sessions.
client.app.crashes(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', builds: 'builds')
Obtains the count of crashes for a number of builds.
client.app.crashfree(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build')
Obtains application crashfree.
Fabric.io website uses the same calculations. However, mobile app behaves differently and shows another value.
client.app.top_issues(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build', count: count)
Obtain top issues.
client.app.single_issue(app_id: 'app_id', issue_id: 'issue_id', start_time: 'start_timestamp', end_time: 'end_timestamp')
Obtain single issue.
client.app.issue_session(app_id: 'app_id', issue_id: 'issue_id', session_id: 'session_id')
Obtain issue session.
client.app.add_comment(app_id: 'app_id', issue_id: 'issue_id', message: 'message')
Add comment.
client.app.oomfree(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', builds:'builds')
Obtains application out-of-memory free for a number of builds.
Build
client.build.all(organization_id: 'organization_id', app_id: 'app_id')
Obtains the list of all application builds.
client.build.get(organization_id: 'organization_id', app_id: 'app_id', version: 'version', build_number: 'build_number')
Obtains a specific build for a specific application.
Version
client.version.all(app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp')
Obtains an array of all versions for a given application.
client.version.top(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp')
Obtains an array of top versions for a given application.
Events
client.app.all_custom_events(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build')
Obtains list of all custom event types.
client.app.custom_event_total(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build', event_type: 'event_type')
Obtains the total count for the specified custom event type.
client.app.custom_event_unique_devices(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build', event_type: 'event_type')
Obtains the unique device count for the specified custom event type.
client.app.all_custom_event_attribute(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', event_type: 'event_type')
Obtains list of all attributes for the specified custom event type.
client.app.custom_event_attribute(organization_id: 'organization_id', app_id: 'app_id', start_time: 'start_timestamp', end_time: 'end_timestamp', build: 'build', event_type: 'event_type', event_attribute: 'event_attribute', selected_time: 'selected_timestamp')
Obtains the attribute count for the specified custom event type.
Additional Info
Fabric.io API:
Authors
- Egor Tolstoy
- Vadim Smal
Thanks for help in dealing with API to Irina Dyagileva and Andrey Smirnov.
License
The gem is available as open source under the terms of the MIT License.