All Projects → cloudfoundry-attic → cf-abacus

cloudfoundry-attic / cf-abacus

Licence: Apache-2.0 license
CF usage metering and aggregation

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to cf-abacus

credhub
CredHub centralizes and secures credential generation, storage, lifecycle management, and access
Stars: ✭ 203 (+103%)
Mutual labels:  cloudfoundry, cf-extensions
credhub-cli
CredHub CLI provides a command line interface to interact with CredHub servers
Stars: ✭ 38 (-62%)
Mutual labels:  cloudfoundry, cf-extensions
cf-swagger
Collection of Swagger descriptions and applications for CloudFoundry BOSH
Stars: ✭ 22 (-78%)
Mutual labels:  cloudfoundry, cf-extensions
heroku-buildpack-deno
Heroku Buildpack for Deno
Stars: ✭ 72 (-28%)
Mutual labels:  cloudfoundry
PCC-Sample-App-PizzaStore
Example sample application which uses Pivotal Cloud Cache(PCC) as a service on Pivotal Cloud Foundry
Stars: ✭ 18 (-82%)
Mutual labels:  cloudfoundry
multiple-deployment-options
Shows how one service can be deployed to multiple deployment options
Stars: ✭ 20 (-80%)
Mutual labels:  cloudfoundry
logistics-wizard
The Logistics Wizard is an end-to-end, smart supply chain management solution that showcases how to execute hybrid cloud, microservices, and predictive data analytics in the real world.
Stars: ✭ 99 (-1%)
Mutual labels:  cloudfoundry
spring-cloud-app-broker
Spring Cloud project for implementing service brokers that conform to the Open Server Broker API specification
Stars: ✭ 26 (-74%)
Mutual labels:  cloudfoundry
cf-k8s-networking
building a cloud foundry without gorouter....
Stars: ✭ 33 (-67%)
Mutual labels:  cloudfoundry
nfs-volume-release
No description or website provided.
Stars: ✭ 17 (-83%)
Mutual labels:  cloudfoundry
cf-mysql-plugin
Cloud Foundry CLI MySQL Plugin
Stars: ✭ 35 (-65%)
Mutual labels:  cloudfoundry
monarch
App-level Chaos Engineering
Stars: ✭ 26 (-74%)
Mutual labels:  cloudfoundry
go-uaa
UAA API Client Library
Stars: ✭ 14 (-86%)
Mutual labels:  cloudfoundry
routing-release
This is the BOSH release for cloud foundry routers
Stars: ✭ 36 (-64%)
Mutual labels:  cloudfoundry
MySQL-cheatsheet
Cheatsheet for MySQL
Stars: ✭ 43 (-57%)
Mutual labels:  aggregation
cf-ops-automation
a collaboration framework for operating cloudfoundry and services at scale
Stars: ✭ 21 (-79%)
Mutual labels:  cloudfoundry
uaa-cli
CLI for UAA written in Go
Stars: ✭ 22 (-78%)
Mutual labels:  cloudfoundry
akka-react-cloudant
A Soccer Dashboard created by scraping EPL website using Akka backend and ReactJS frontend and IBM Cloudant for object storage. IBM Cloud Foundry is used to host both frontend and backend app.
Stars: ✭ 21 (-79%)
Mutual labels:  cloudfoundry
eirini-release
Helm release for Project Eirini
Stars: ✭ 37 (-63%)
Mutual labels:  cloudfoundry
go-cfclient
Golang client lib for Cloud Foundry
Stars: ✭ 61 (-39%)
Mutual labels:  cloudfoundry

CF-Abacus

The Abacus usage metering and aggregation service.

Build Status codecov Codacy Badge slack.cloudfoundry.org

Overview

Abacus provides usage metering and aggregation for Cloud Foundry (CF) services. It is implemented as a set of REST micro-services that collect usage data, apply metering formulas, and aggregate usage at several levels within a Cloud Foundry organization.

Abacus is implemented in Node.js and the different micro-services can run as CF apps.

This diagram shows the main Abacus services and their role in the processing of usage data. It also shows the services you can deploy around Abacus to integrate it into your Cloud platform.

Abacus flow diagram

Abacus provides a REST API allowing Cloud service providers to submit usage data, and a REST API allowing usage dashboards, and billing systems to retrieve usage reports. The Abacus REST API is described in doc/api.md.

For presentations related to CF-Abacus, see the presentations page.

Frequently Asked Questions (FAQs)

The Abacus FAQ can be found in doc/faq.md.

Building

Abacus requires Node.js >= 8.10.0, Yarn > 1.3.2, MongoDB >= 3.4 and RabbitMQ >= 3.6

cd cf-abacus

# Start local MongoDB and RabbitMQ
docker-compose up

# Bootstrap the build environment
# install the Node.js module dependencies and run the tests
yarn run build

Running Abacus on localhost

The Abacus apps can also run on your local host in a shell environment outside of Cloud Foundry, like this:

cd cf-abacus

# Start local MongoDB and RabbitMQ
docker-compose up

# Start the Abacus apps
yarn start

# Wait a bit until all the apps have started

# Run the demo script
yarn run demo

# Stop everything
yarn stop

Dependency management

Abacus uses yarn to fix the versions of a package's dependencies. Fixed dependencies are persisted in yarn.lock file which is located at the same directory where package.json file exists.

Updating dependencies

  • Automatically Dependencies could be updated automatically for the whole repository by executing the steps bellow. As a result this script will regenerate all lock files.
cd cf-abacus

# Generates the yarn.lock files
bin/update-dependencies
  • Manually If you prefer to update dependencies of particular module, it is possible to do it manually with the following steps.
cd cf-abacus/lib/<module>

# Delete existing dependencies
rm -rf node_modules/

# Delete existing lock file
rm yarn.lock

# Install/Update dependency/cies in package.json file either manually or via yarn
yarn add <dependency>

# Add dependency
yarn install

Testing

cd cf-abacus

# Start local MongoDB and RabbitMQ
docker-compose up

# Run eslint on the Abacus modules
yarn run lint

# Run the tests
yarn test

For a list of all available tests check doc/tests.md.

Deploying to Cloud Foundry

Check our wiki on how to deploy Abacus to Cloud Foundry.

Layout

The Abacus source tree is organized as follows:

bin/ - Start, stop, demo and cf push scripts

demo/ - Demo apps

    client - demo program that posts usage and gets a report

doc/ - API documentation

lib/ - Abacus modules

    metering/ - Metering services

        collector - receives and collects service usage data
        meter     - applies metering formulas to usage data

    aggregation/ - Aggregation services

        accumulator - accumulates usage over time and applies
                      pricing to accumulated usage
        aggregator  - aggregates usage within an organization and applies
                      pricing to aggregated usage
        reporting   - returns usage reports

    cf/ - CF platform integration

        applications - collects CF app usage data

        renewer - carries over usage from previous month

        services - collects CF service usage data

        broker -  provisions Abacus service instances

        dashboard - provides UI to define and manage the resource provider plans

    config/ - Usage formula and pricing configuration

    utils/ - Utility modules used by the above

    plugins/ - Plugins for provisioning and account services

    extensions/ - Extension healthcheck and housekeeper apps

test/ - Tests

    integration/ - Integration tests which may depend on local MongoDB or RabbitMQ

    scenario/ - End-to-end scenarios using a fully deployed system

    performance/ - Load tests, which require a pre-deployed system

    dependency/ - Tests against remote systems (ones that Abacus depends on) and verify that their API contracts have not changed

tools/ - Build tools

etc/ - Misc build scripts

Developing individual Abacus modules

As shown in the above Layout section, Abacus consists of a number of Node.js modules under the lib directory.

When developing on Abacus you may want to quickly iterate through changes to a single module, and run the tests only for that module rather than rebuilding the whole project each time.

Here are the steps most of us follow when we work on a single module, using the collector module as an example.

First, bootstrap your Abacus development environment:

cd cf-abacus

# Setup the base Node.js tools and dependencies used by the Abacus build
yarn run bootstrap

Then install your module's dependencies as usual with yarn:

cd cf-abacus/lib/metering/collector
yarn install

At this point your development cycle boils down to:

cd cf-abacus/lib/metering/collector

# Run ESLint on your code and run the module's unit tests
yarn test

To run the collector app you can do this:

cd cf-abacus/lib/metering/collector
yarn start

To push the app to your Cloud Foundry instance, do this:

cd cf-abacus/lib/metering/collector
yarn run cfpush

Finally, to rebuild everything once you're happy with your module:

cd cf-abacus

# Important to do at this point as the next step does a git clean
git add <your changes>

# Does a git clean to make sure the build starts fresh
yarn run clean

# Build and unit test all the modules
yarn run build

# Or to run what our Travis-CI build runs, including integration tests
yarn run cibuild

People

List of all contributors

License

Apache License 2.0

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].