https://github.com/strongself/fabricio
Fetch Fabric.io statistics like never before
https://github.com/strongself/fabricio
crash-reporting fabric
Last synced: 4 months ago
JSON representation
Fetch Fabric.io statistics like never before
- Host: GitHub
- URL: https://github.com/strongself/fabricio
- Owner: strongself
- License: mit
- Created: 2016-11-27T13:05:11.000Z (over 9 years ago)
- Default Branch: develop
- Last Pushed: 2018-10-17T10:31:43.000Z (over 7 years ago)
- Last Synced: 2025-06-18T08:50:04.251Z (12 months ago)
- Topics: crash-reporting, fabric
- Language: Ruby
- Size: 228 KB
- Stars: 156
- Watchers: 31
- Forks: 25
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Fabricio
[](https://badge.fury.io/rb/fabricio)
[](https://travis-ci.org/strongself/fabricio)
[](https://codeclimate.com/github/strongself/fabricio)
[](https://codeclimate.com/github/strongself/fabricio/coverage)
> pronounce as [f-ah-bree-see-oh]
A simple gem that fetches mobile application statistics from [Fabric.io](http://fabric.io) using its ~~private~~ not publicly opened [API](https://github.com/strongself/fabricio/blob/develop/docs/api_reference.md).
There is a possibility that in some point of time it may break. Feel free to [post an issue](https://github.com/strongself/fabricio/issues) and we'll fix it ASAP.
## The Story Behind
[Fabric.io](http://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:
```ruby
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
```bash
> fabricio credential
Setup credential
We have to know you\'re email from fabric account
email: test@test.com
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`](https://stedolan.github.io/jq/) for parsing json
> fabricio version all --app_id 'app_id' | jq 'sort_by(.major)[-1].synthesized_version'
"14.0 (131)"
### Code
1. Create a `Fabricio::Client` object and configure it on initialization.
```ruby
require 'Fabricio'
client = Fabricio::Client.new do |config|
config.username = 'your_email'
config.password = 'your_password'
end
```
2. Use this client to query any data you want.
```ruby
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
```
3. 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:
- [cURL requests](https://github.com/strongself/fabricio/blob/develop/docs/api_reference.md)
- [Swagger](https://github.com/strongself/fabricio/blob/develop/docs/swagger-api.json)
## 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](http://opensource.org/licenses/MIT).