Skip to content

Commit

Permalink
Merge branch 'working_draft' into flanakin/accounttype
Browse files Browse the repository at this point in the history
  • Loading branch information
flanakin authored Mar 7, 2024
2 parents fbb76b3 + d3ea989 commit 790156d
Show file tree
Hide file tree
Showing 10 changed files with 171 additions and 61 deletions.
61 changes: 61 additions & 0 deletions .github/ISSUE_TEMPLATE/feedback.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: FinOps Use Case Feedback
description: Provide feedback on FinOps use cases that cannot be performed with the current FOCUS specification.
title: "[FEEDBACK]: "
labels: ["feedback", "use-case"]
assignees: ["mike-finopsorg,udam-f2"]
body:
- type: markdown
attributes:
value: "The FOCUS working group wants to understand what FinOps use cases cannot be performed today using the current specification so they can be prioritized for upcoming release. Please do not provide any information that may be considered Intellectual Property by any individual or organization."

- type: input
attributes:
label: Proposed Change
description: Short description of the change and why it is necessary.
placeholder: Describe the proposed change briefly and why it is necessary
validations:
required: true

- type: textarea
attributes:
label: What FinOps use cases cannot be performed without the proposed change?
description: Describe in detail the current FinOps use cases your organization cannot perform without the proposed change
validations:
required: true

- type: input
attributes:
label: Which FinOps personas perform this use case?
description: List one or more FinOps personas that perform this use case
placeholder: e.g., Cost Analyst, Cloud Architect, etc
validations:
required: true

- type: input
attributes:
label: For which providers do you perform this use case for?
description: List each provider separated by commas
placeholder: e.g., AWS, Azure, GCP, Snowflake, etc
validations:
required: true

- type: dropdown
attributes:
label: Criticality Scale
description: On a scale of 1 - 4, how critical is this for your organization?
options:
- '1: Blocks my organization from adopting FOCUS'
- '2: Important for adoption in the next 3-6 months'
- '3: Important for adoption in the next 6-12 months'
- '4: Suggestion, not planning to use FOCUS soon'
validations:
required: true

- type: textarea
attributes:
label: Context / Supporting information
description: Provide any other relevant information here
placeholder: Additional details...
validations:
required: true

17 changes: 0 additions & 17 deletions .github/ISSUE_TEMPLATE/proposal.md

This file was deleted.

35 changes: 35 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Contributing to the FOCUS Specification

This repository represents the written spec, not working code. As such, most people will not need any development environment - most of the work around the spec happens in regularly scheduled discussions and issues here in Github. If you wish to get involved please see the [FinOps Foundation website](https://focus.finops.org/) and consider [signing the CLA](https://github.com/FinOps-Open-Cost-and-Usage-Spec/EasyCLA).

Please see the [contribution policy](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/contributing.md) for more information.

## FOCUS Specification Development Environment

The following is mostly needed by the FinOps Foundation staff members who maintain the FOCUS Repositories and associated document build pipelines. Currently, the only tested (supported) environment is a MacOS setup, however the build pipeline in GitHub uses Ubuntu so should be possible to run on a Linux environment.

### Setup Steps

1. Install homebrew (as per: https://brew.sh)
2. Setup cask

`brew install cask`
3. Install python

`brew install python`
4. Add packages for python

`pip3 install -r requirements.txt`
5. Install pandoc and required filter library

`brew install pandoc`

`brew install --cask wkhtmltopdf`
6. If your machine does not have git/make etc, you might fun the following: Install developer command line tools for MacOS

`xcode-select --install`

### Assembling the specification locally

1. Move into the `specification` folder
2. Use make to generate the spec `make`
45 changes: 13 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
# FinOps Open Cost and Usage Specification (FOCUS) - Specification Working Group

The Open Cloud Bill working group will develop a common, source-neutral schema of
billing, cost, usage, and observability data mapped to a variety of cloud service provider and SaaS product
sources, with metadata, dimensions, metrics, and measures for the source and common schema fields. As per the [Working Group Charter]() **Link TBC**
## Overview

The FinOps Open Cost and Usage Specification (FOCUS) is a community-driven effort to develop a standard schema for cloud, SaaS, and other billing data. The primary goal of the FOCUS specification is to make it easier to understand, report on, and manage cloud costs. The FOCUS specification is intended to be adaptable across a variety of cloud service provider and SaaS product sources and defines columns (dimensions and metrics), column-specific requirements, and attributes (spec-wide requirements). This repo also provides supporting content that includes example mappings between well-known provider datasets and what's defined in the FOCUS specification.

The vision of the FOCUS project is to help the cloud and SaaS industry move toward a common vocabulary around usage and billing data. This will not only help FinOps professionals in the analysis of billing data from disparate sources but will also help software engineering teams by providing a target format for the usage and billing data that their products will generate.

Some of the usecases this capability can enable:

- The FOCUS spec will make it easier for FinOps practitioners to approach a new billing data source, as common concepts have been mapped to the common vocabulary of the spec.
- The FOCUS spec will make it easier to merge multiple billing data sources together, and perform cross-cloud and cross-vendor analysis and cost reporting.
- The FOCUS spec should make it easier to open source more FinOps visibility tools, and to accelerate the FinOps framework capability of data ingestion and normalization.

[Working Group Charter]() **Link TBC**

## Notation Conventions and Compliance

Expand Down Expand Up @@ -37,32 +47,3 @@ See the [project repository](https://github.com/FinOps-Open-Cost-and-Usage-Spec/

- [Change / contribution process](https://github.com/FinOps-Open-Cost-and-Usage-Spec/foundation/blob/main/contributing.md)

## FOCUS Specification Development Environment

Most people will not need any development environment, it is mostly needed by the FinOps Foundation staff members who maintain the FOCUS Repositories and associated document build pipelines. Currently, the only tested (supported) environment is a MacOS setup, however the build pipeline in GitHub uses Ubuntu so should be possible to run on a Linux environment.

### Setup Steps

1. Install homebrew (as per: https://brew.sh)
2. Setup cask

`brew install cask`
3. Install python

`brew install python`
4. Add packages for python

`pip3 install -r requirements.txt`
5. Install pandoc and required filter library

`brew install pandoc`

`brew install --cask wkhtmltopdf`
6. If your machine does not have git/make etc, you might fun the following: Install developer command line tools for MacOS

`xcode-select --install`

### Assembling the specification locally

1. Move into the `specification` folder
2. Use make to generate the spec `make`
50 changes: 50 additions & 0 deletions RELEASE-PLANNING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## Release Planning
This estimated time line was approved by the Members working group on the Feb 29 meeting.

<table border="1">
<caption>Estimated Timeline v1.0</caption>
<thead>
<tr>
<th>Date</th>
<th>Tasks</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<tr>
<td>Feb 28 - Mar 11</td>
<td>Consistency Review</td>
<td>Opportunity for everyone to review what has been agreed upon in the working-draft branch. </br> Lock scope for v1.0.</td>
</tr>
<tr>
<td>Mar 12 - Apr 22</td>
<td>Drive v1.0 milestone issues to completion</td>
<td>Incoming issues will be prioritized by maintainers. Only <a href="https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/labels" target="_blank">P0 and some P1</a> issues will get added to the v1.0 milestone. Prioritization will take voting and comments in issues into consideration</td>
</tr>
<tr>
<td>Apr 23 - Apr 30</td>
<td>Final Consistency Review</td>
<td>Freeze working-draft. </br> Final review, only expecting editorial comments.</td>
</tr>
<tr>
<td>May 2</td>
<td>Release Candidate Approve by the WG Members</td>
<td></td>
</tr>
<tr>
<td>May 2 - May 31</td>
<td>IPR Review</td>
<td>Members may exclude any Essential Claims from their licensing commitments during this period.</td>
</tr>
<tr>
<td>Jun 3</td>
<td>Steering Committee Ratifies the Release</td>
<td></td>
</tr>
<tr>
<td>Jun 20</td>
<td>FinOps X: Onstage FOCUS Adoption stories</td>
<td></td>
</tr>
</tbody>
</table>
4 changes: 2 additions & 2 deletions specification/columns/pricingquantity.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Pricing Quantity

The Pricing Quantity represents the volume of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased based on the [Pricing Unit](#pricingunit). Distinct from [Usage Quantity](#usagequantity) (complementary to [Usage Unit](#usageunit)), it focuses on pricing and cost, not *resource* and *service* consumption.
The Pricing Quantity represents the volume of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased, based on the [Pricing Unit](#pricingunit). Distinct from [Usage Quantity](#usagequantity) (complementary to [Usage Unit](#usageunit)), it focuses on pricing and cost, not *resource* and *service* consumption.

PricingQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. When unit prices are not null, multiplying PricingQuantity by a unit price MUST produce a result equal to the corresponding cost metric.

Expand All @@ -14,7 +14,7 @@ Pricing Quantity

## Description

The volume of a given *resource* or *service* used or purchased based on the Pricing Unit.
Volume of a given SKU associated with a *resource* or *service* used or purchased, based on the Pricing Unit.

## Content constraints

Expand Down
6 changes: 3 additions & 3 deletions specification/columns/pricingunit.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Pricing Unit

The Pricing Unit represents a provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities considering pricing rules like [*block pricing*](#glossary:block-pricing). Common examples include the number of hours for compute appliance runtime (e.g. `Hours`), gigabyte-hours for a storage appliance (e.g., `GB-Hours`), or an accumulated count of requests for a network appliance or API service (e.g., `1000 Requests`). Pricing Unit complements the [Pricing Quantity](#pricingquantity) metric. Distinct from the [Usage Unit](#usageunit), it focuses on pricing and cost, not [*resource*](#glossary:resource) and [*service*](#glossary:service) consumption, often at a coarser granularity.
The Pricing Unit represents a provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like [*block pricing*](#glossary:block-pricing). Common examples include the number of hours for compute appliance runtime (e.g. `Hours`), gigabyte-hours for a storage appliance (e.g., `GB-Hours`), or an accumulated count of requests for a network appliance or API service (e.g., `1000 Requests`). Pricing Unit complements the [Pricing Quantity](#pricingquantity) metric. Distinct from the [Usage Unit](#usageunit), it focuses on pricing and cost, not [*resource*](#glossary:resource) and [*service*](#glossary:service) consumption, often at a coarser granularity.

The PricingUnit column MUST be present in the billing data. This column MUST be of type String. It MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in PricingUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute.
The PricingUnit column MUST be present in the billing data. This column MUST be of type String. The value MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in PricingUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute.

The PricingUnit value MUST be semantically equal to the corresponding pricing measurement unit value provided in:

Expand All @@ -19,7 +19,7 @@ Pricing Unit

## Description

A provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like *block pricing*.
Provider-specified measurement unit for determining unit prices, indicating how a provider rates measured usage and purchase quantities after applying pricing rules like *block pricing*.

## Content constraints

Expand Down
2 changes: 1 addition & 1 deletion specification/columns/subaccountid.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

A Sub Account ID is a provider assigned identifier assigned to a [*sub account*](#glossary:sub-account). Sub account ID is commonly used for scenarios like grouping based on organizational constructs, access management needs, and cost allocation strategies.

The SubAccountId column MUST be present in the billing data. This column MUST be of type String. If a provider supports a *sub account* construct, that value MUST appear in this column. If a provider does not support a *sub account* construct (only has a *billing account*](#glossary:billing-account)) or does support a *sub account* construct, but the charge does not apply to a *sub account*, the SubAccountId column MUST be null.
The SubAccountId column MUST be present in the billing data. This column MUST be of type String. If a provider supports a *sub account* construct, that value MUST appear in this column. If a provider does not support a *sub account* construct (only has a [*billing account*](#glossary:billing-account)) or does support a *sub account* construct, but the charge does not apply to a *sub account*, the SubAccountId column MUST be null.

See [Appendix: Grouping constructs for resources or services](#groupingconstructsforresourcesorservices) for details and examples of the different grouping constructs supported by FOCUS.

Expand Down
6 changes: 3 additions & 3 deletions specification/columns/usagequantity.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Usage Quantity

The Usage Quantity represents the volume of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased based on the [Usage Unit](#usageunit). Usage Quantity is often derived at a finer granularity or over a different time interval when compared to the [Pricing Quantity](#pricingquantity) (complementary to [Pricing Unit](#pricingunit)), and focuses on *resource* and *service* consumption, not pricing and cost.
The Usage Quantity represents the volume of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased, based on the [Usage Unit](#usageunit). Usage Quantity is often derived at a finer granularity or over a different time interval when compared to the [Pricing Quantity](#pricingquantity) (complementary to [Pricing Unit](#pricingunit)), and focuses on *resource* and *service* consumption, not pricing and cost.

UsageQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT contain null values when [SkuPriceId](#skupriceid) is not null.
UsageQuantity MUST be present in the billing data. This column MUST be of type Decimal and MUST conform to [Numeric Format](#numericformat). The value MAY be negative in cases where [ChargeSubcategory](#chargesubcategory) is "Refund". This column MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null.

## Column ID

Expand All @@ -14,7 +14,7 @@ Usage Quantity

## Description

Volume of a given *resource* or *service* used or purchased based on the [Usage Unit](#usageunit).
Volume of a given SKU associated with a *resource* or *service* used or purchased, based on the Usage Unit.

## Content constraints

Expand Down
6 changes: 3 additions & 3 deletions specification/columns/usageunit.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Usage Unit

Usage Unit represents the units of a given [*resource*](#glossary:resource) or [*service*](#glossary:service) used or purchased in combination with [Usage Quantity](#usagequantity). Usage Unit is often listed at a finer granularity or over a different time interval when compared to the [Pricing Unit](#pricingunit) (complementary to [Pricing Quantity](#pricingquantity)), and focuses on *resource* and *service* consumption, not pricing and cost.
The Usage Unit represents a provider-specified measurement unit indicating how a provider measures usage or purchase of a given SKU associated with a [*resource*](#glossary:resource) or [*service*](#glossary:service). Usage Unit complements the [Usage Quantity](#usagequantity) metric. It is often listed at a finer granularity or over a different time interval when compared to the [Pricing Unit](#pricingunit) (complementary to [Pricing Quantity](#pricingquantity)), and focuses on *resource* and *service* consumption, not pricing and cost.

The UsageUnit column MUST be present in the billing data. This column MUST be of type String and MUST NOT contain null values when the [ChargeCategory](#chargecategory) is "Usage". Units of measure used in UsageUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. The UsageUnit column MUST NOT be used as the basis for determining values related to any pricing or cost metric.
The UsageUnit column MUST be present in the billing data. This column MUST be of type String. The value MUST NOT be null if [SkuPriceId](#skupriceid) is not null and MUST be null if SkuPriceId is null. Units of measure used in UsageUnit SHOULD adhere to the values and format requirements specified in the [UnitFormat](#unitformat) attribute. The UsageUnit column MUST NOT be used to determine values related to any pricing or cost metrics.

## Column ID

Expand All @@ -14,7 +14,7 @@ Usage Unit

## Description

Units of a given *resource* or *service* used or purchased in combination with [Usage Quantity](#usagequantity).
Provider-specified measurement unit indicating how a provider measures usage or purchase of a given SKU associated with a *resource* or *service*.

## Content constraints

Expand Down

0 comments on commit 790156d

Please sign in to comment.