Giter Club home page Giter Club logo

fili's Introduction

Fili

Download Gitter Travis Codacy grade ![Codacy coverage](https://img.shields.io/codacy/coverage/91fa6c38f25d4ea0ae3569ee70a33e38.svg?label=test coverage&maxAge=2592000) VersionEye

Fili is a Java-based framework that makes it easy to build and maintain RESTful web services for time series reporting and analytics. Fili's HTTP GET-based reporting API is clean and user-friendly, hiding the complexities of complicated metric and dimension definition, data storage, and query optimization from end-users. Designed with Big Data and scalability in mind, Fili has first-class support for Druid as a back-end, but Fili's flexible pipeline-style architecture can handle nearly any back-end for data storage.

Fili exposes the same core concepts that all time series reporting and analytics systems expose:

Other systems expose additional concepts like Views, Partitions, and metric formulas, but Fili chooses not to expose end-users to those low-level concerns. By limiting the mental model of Fili's API to just these core domain concepts, Fili's API allows end-users to better extract business value by focusing on finding answers to the what and why questions from their data, rather than on how to ask their question.

Fili's simple and clear API lets users focus on their business-driven questions, and the Fili library takes care of figuring out how to best answer the question for them.

This simplicity also allows for a huge amount of flexibility around where data is stored and how it's queried and retrieved from back-end systems. Having such flexibility allows those maintaining a web service built with Fili to move data around, better optimize queries, and even swap out entire back-end systems without breaking their end-users or forcing them to go through a painful migration.

Fili also provides a plethora of other capabilities. Here are some of them:

Functionality Operability
Complex metric definition Rate limiting
Performance slice routing Query weight checks
Dimension joins (both annotation and filtering) Rich usage metrics
Partial interval protection Health checks
Volatile data handling Caching
Modular architecture

Community Gitter

The Fili community generally hangs out on Gitter, so please drop by if you have any questions, comments, concerns, wishes, hopes, dreams, wants, needs, yearnings, musings, or idle curiosities about Fili. The core Fili developers love meeting new people and talking with them about how they can best use Fili to solve their Big Data time series reporting and analytics problems. We know there are gaps in Fili, and definitely lots of new, powerful capabilities to add, so hearing about what's working and what could be better will help drive the direction of Fili.

If you have other thoughts, or are running into trouble and are not able to get help from the community on Gitter, please open an issue describing your problem or idea.

If you would like to get involved with Fili development, there's some "contribution quickstart" info down below, and much more information in our CONTRIBUTING file.

Quick Start

Fili comes with a pre-configured example application to help you get started and serve as a jumping-off-point for building your own web service using Fili. The example application lets you report on Wikipedia article edit information, and picks up where Druid's quick-start tutorial leaves off.

Versioning

Fili is stable and production-ready today, but the codebase is still under active development, with many large-scale changes and new features being worked on or planned for the future.

Active development happens on the patch version of the highest minor version.

@Deprecated

APIs marked with the @Deprecated annotation are planned for removal in upcoming releases. Deprecated APIs will be supported for 1 stable release beyond the release in which they were deprecated, but it is strongly recommended to stop using them. After deprecated APIs are no longer supported, they may be removed at any time.

Binaries (How to Get It)

Binaries for Fili are stored in Bintray. Dependency information for Maven, Ivy, and Gradle can be found at https://bintray.com/yahoo/maven/fili, and some examples are below.

Maven:

<dependency>
    <groupId>com.yahoo.fili</groupId>
    <artifactId>fili</artifactId>
    <version>x.y.z</version>
</dependency>

<repository>
    <id>fili</id>
    <url>http://yahoo.bintray.com/maven</url>
</repository>

Gradle:

repositories {
    maven { url 'http://yahoo.bintray.com/maven' }
}

dependencies {
    compile 'com.yahoo.fili:fili:x.y.z'
}

The most bleeding-edge version is: Bleeding-edge

The most recent stable version is: Stable

Extending

Fili's easy to extend! It has a bunch of hooks already (AbstractBinderFactory)! There's a module system for config and modules depending on other modules! There's lots more to say here, but the time the time, look at the time!

Contributing

More details can be found in the CONTRIBUTING file, but here are the basics to get you started.

Bug Reports & Feature Requests

If you find a bug, or something doesn't seem to be working right, please open an issue and include as much information about how you have things set up as possible, and include any relevant logs if you can.

If there's a feature, capability, or enhancement you would like to see in Fili, please open an issue and describe what you would like to see changed.

Building

PRs are very welcome! Since Fili is a multi-module Maven project you'll need a recent version of Maven. Once you have Maven installed, to build and run the tests:

$ git clone [email protected]:yahoo/fili.git
$ cd fili/
$ mvn test

We're big believers in testing our code, both for correctness, as well as to ensure that changes don't unintentionally break existing contracts unintentionally. We rely heavily on the Spock framework for our tests, and see a lot of benefit from it's conciseness, built-in mocking framework, and the fact that it uses Groovy. ๐Ÿ˜„

We also strive for very high-quality code, with the belief that quality code is easier to maintain, easier to understand, and has fewer bugs. To help keep the quality bar high, we have an automated style checker (Checkstyle) with rules that should catch most of the common style issues. The full details of what the checker looks for can be found in our checkstyle config, but the Google Java style guide covers most of it, and is very close to our style.

Design and Architecture

Fili was designed from the ground-up to be amazing, scalable, and extensible. There's some nifty parts about Fili's architecture that let it be so cool. We have lots of great diagrams and schematics, but they've been misplaced at the moment. For now, it's safe to say that our architecture is under construction!

LICENSE

Copyright 2016 Yahoo! Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

fili's People

Contributors

archolewa avatar cdeszaq avatar codingwhatever avatar dayamr avatar garyluoex avatar jacobtolar avatar kkalyan avatar mangesh-pardeshi avatar michael-mclawhorn avatar qubitpi avatar rvrskumar avatar sriram-viswanathan avatar will-lauer avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.