Skip to content

Commit

Permalink
feat(instance): Add makeDiskInfos helper
Browse files Browse the repository at this point in the history
  • Loading branch information
cballevre committed Jul 10, 2023
1 parent bf2c241 commit b8ced4b
Show file tree
Hide file tree
Showing 7 changed files with 262 additions and 14 deletions.
41 changes: 41 additions & 0 deletions docs/api/cozy-client/interfaces/models.instance.DiskInfos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[cozy-client](../README.md) / [models](../modules/models.md) / [instance](../modules/models.instance.md) / DiskInfos

# Interface: DiskInfos<>

[models](../modules/models.md).[instance](../modules/models.instance.md).DiskInfos

## Properties

### humanDiskQuota

**humanDiskQuota**: `string`

Space used in GB rounded

*Defined in*

[packages/cozy-client/src/models/instance.js:121](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L121)

***

### humanDiskUsage

**humanDiskUsage**: `string`

Maximum space available in GB rounded

*Defined in*

[packages/cozy-client/src/models/instance.js:122](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L122)

***

### percentUsage

**percentUsage**: `string`

Usage percent of the disk rounded

*Defined in*

[packages/cozy-client/src/models/instance.js:123](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L123)
41 changes: 41 additions & 0 deletions docs/api/cozy-client/interfaces/models.instance.DiskInfosRaw.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[cozy-client](../README.md) / [models](../modules/models.md) / [instance](../modules/models.instance.md) / DiskInfosRaw

# Interface: DiskInfosRaw<>

[models](../modules/models.md).[instance](../modules/models.instance.md).DiskInfosRaw

## Properties

### diskQuota

**diskQuota**: `number`

Space used in GB

*Defined in*

[packages/cozy-client/src/models/instance.js:114](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L114)

***

### diskUsage

**diskUsage**: `number`

Maximum space available in GB

*Defined in*

[packages/cozy-client/src/models/instance.js:115](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L115)

***

### percentUsage

**percentUsage**: `number`

Usage percent of the disk

*Defined in*

[packages/cozy-client/src/models/instance.js:116](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L116)
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Object returned by /settings/context

*Defined in*

[packages/cozy-client/src/models/instance.js:15](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L15)
[packages/cozy-client/src/models/instance.js:16](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L16)

***

Expand All @@ -26,7 +26,7 @@ Object returned by /settings/disk-usage

*Defined in*

[packages/cozy-client/src/models/instance.js:17](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L17)
[packages/cozy-client/src/models/instance.js:18](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L18)

***

Expand All @@ -38,4 +38,4 @@ Object returned by /settings/instance

*Defined in*

[packages/cozy-client/src/models/instance.js:16](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L16)
[packages/cozy-client/src/models/instance.js:17](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L17)
49 changes: 38 additions & 11 deletions docs/api/cozy-client/modules/models.instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

## Interfaces

* [DiskInfos](../interfaces/models.instance.DiskInfos.md)
* [DiskInfosRaw](../interfaces/models.instance.DiskInfosRaw.md)
* [SettingsInfo](../interfaces/models.instance.SettingsInfo.md)

## Type aliases
Expand All @@ -16,7 +18,7 @@

*Defined in*

[packages/cozy-client/src/models/instance.js:9](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L9)
[packages/cozy-client/src/models/instance.js:10](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L10)

***

Expand All @@ -26,7 +28,7 @@

*Defined in*

[packages/cozy-client/src/models/instance.js:10](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L10)
[packages/cozy-client/src/models/instance.js:11](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L11)

***

Expand All @@ -36,7 +38,7 @@

*Defined in*

[packages/cozy-client/src/models/instance.js:8](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L8)
[packages/cozy-client/src/models/instance.js:9](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L9)

## Functions

Expand All @@ -56,7 +58,7 @@

*Defined in*

[packages/cozy-client/src/models/instance.js:24](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L24)
[packages/cozy-client/src/models/instance.js:25](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L25)

***

Expand All @@ -78,7 +80,7 @@ Returns the link to the Premium page on the Cozy's Manager

*Defined in*

[packages/cozy-client/src/models/instance.js:71](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L71)
[packages/cozy-client/src/models/instance.js:72](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L72)

***

Expand All @@ -98,7 +100,7 @@ Returns the link to the Premium page on the Cozy's Manager

*Defined in*

[packages/cozy-client/src/models/instance.js:33](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L33)
[packages/cozy-client/src/models/instance.js:34](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L34)

***

Expand All @@ -122,7 +124,7 @@ Does the cozy have offers

*Defined in*

[packages/cozy-client/src/models/instance.js:57](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L57)
[packages/cozy-client/src/models/instance.js:58](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L58)

***

Expand All @@ -146,7 +148,7 @@ Checks the value of the password_defined attribute

*Defined in*

[packages/cozy-client/src/models/instance.js:91](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L91)
[packages/cozy-client/src/models/instance.js:92](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L92)

***

Expand All @@ -166,7 +168,7 @@ Checks the value of the password_defined attribute

*Defined in*

[packages/cozy-client/src/models/instance.js:29](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L29)
[packages/cozy-client/src/models/instance.js:30](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L30)

***

Expand All @@ -192,7 +194,32 @@ Checks the value of the password_defined attribute

*Defined in*

[packages/cozy-client/src/models/instance.js:21](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L21)
[packages/cozy-client/src/models/instance.js:22](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L22)

***

### makeDiskInfos

**makeDiskInfos**(`usage`, `quota`): [`DiskInfos`](../interfaces/models.instance.DiskInfos.md)

Make human readable information from disk information (usage, quota)

*Parameters*

| Name | Type | Description |
| :------ | :------ | :------ |
| `usage` | `string` | `number` | Value in bytes representing the space used |
| `quota` | `string` | `number` | - |

*Returns*

[`DiskInfos`](../interfaces/models.instance.DiskInfos.md)

* Return a set of human readable information about disk

*Defined in*

[packages/cozy-client/src/models/instance.js:164](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L164)

***

Expand All @@ -216,4 +243,4 @@ Should we display offers

*Defined in*

[packages/cozy-client/src/models/instance.js:43](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L43)
[packages/cozy-client/src/models/instance.js:44](https://github.com/cozy/cozy-client/blob/master/packages/cozy-client/src/models/instance.js#L44)
65 changes: 65 additions & 0 deletions packages/cozy-client/src/models/instance.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import get from 'lodash/get'
import { Q } from '../queries/dsl'

const FallbackQuota = 1e11
const GB = 1000 * 1000 * 1000
const PREMIUM_QUOTA = 50 * GB

Expand Down Expand Up @@ -107,3 +108,67 @@ export const hasPasswordDefinedAttribute = async client => {
return false
}
}

/**
* @typedef DiskInfosRaw
* @property diskQuota {number} - Space used in GB
* @property diskUsage {number} - Maximum space available in GB
* @property percentUsage {number} - Usage percent of the disk
*/

/**
* @typedef DiskInfos
* @property humanDiskQuota {string} - Space used in GB rounded
* @property humanDiskUsage {string} - Maximum space available in GB rounded
* @property percentUsage {string} - Usage percent of the disk rounded
*/

/**
* Convert input value into GB
*
* @param {number} bytes - Value in bytes
* @returns {number} - Returns the value in GB
*/
const convertBytesToGB = bytes => bytes * 1e-9

/**
* Computes `value` rounded to `fractionDigits`.
*
* @param {number} value - Value to format
* @param {number} fractionDigits - Number of decimal numbers
* @returns {string} - Returns the rounded number as a string
*/
const formatDecimals = (value, fractionDigits = 2) =>
`${value % 1 ? value.toFixed(fractionDigits) : value}`

/**
* Transform bytes data to GB data and compute percent usage
*
* @param {number} usage - Value in bytes representing the space used
* @param {number} quota - Value in bytes representing the maximum space available
* @returns {DiskInfosRaw} - Returns an transform data to GB and usage percent of the disk
*/
const computeDiskInfos = (usage, quota = FallbackQuota) => ({
diskQuota: convertBytesToGB(quota),
diskUsage: convertBytesToGB(usage),
percentUsage: (usage / quota) * 100
})

/**
* Make human readable information from disk information (usage, quota)
*
* @param {number|string} usage - Value in bytes representing the space used
* @param {number|string} [quota] - Value in bytes representing the maximum space available
* @returns {DiskInfos} - Return a set of human readable information about disk
*/
export const makeDiskInfos = (usage, quota) => {
const { diskQuota, diskUsage, percentUsage } = computeDiskInfos(
+usage,
quota ? +quota : undefined
)
return {
humanDiskQuota: formatDecimals(diskQuota),
humanDiskUsage: formatDecimals(diskUsage),
percentUsage: Math.round(percentUsage).toString()
}
}
45 changes: 45 additions & 0 deletions packages/cozy-client/src/models/instance.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,49 @@ describe('instance', () => {
expect(instance.hasAnOffer(hadAnOfferInstance)).toBe(true)
expect(instance.hasAnOffer(selftHostedInstance)).toBe(false)
})

describe('makeDiskInfos', () => {
it('computes disk percent with a quota', () => {
expect(instance.makeDiskInfos('0', '5000000000')).toStrictEqual({
humanDiskQuota: '5',
humanDiskUsage: '0',
percentUsage: '0'
})
expect(instance.makeDiskInfos('115600793', '5000000000')).toStrictEqual({
humanDiskQuota: '5',
humanDiskUsage: '0.12',
percentUsage: '2'
})
expect(
instance.makeDiskInfos('22115600793', '90000000000')
).toStrictEqual({
humanDiskQuota: '90',
humanDiskUsage: '22.12',
percentUsage: '25'
})
expect(instance.makeDiskInfos('5000000000', '5000000000')).toStrictEqual({
humanDiskQuota: '5',
humanDiskUsage: '5',
percentUsage: '100'
})
})

it('computes disk percent without a quota', () => {
expect(instance.makeDiskInfos('1156007930', '')).toStrictEqual({
humanDiskQuota: '100',
humanDiskUsage: '1.16',
percentUsage: '1'
})
expect(instance.makeDiskInfos('0', undefined)).toStrictEqual({
humanDiskQuota: '100',
humanDiskUsage: '0',
percentUsage: '0'
})
expect(instance.makeDiskInfos('0', 0)).toStrictEqual({
humanDiskQuota: '100',
humanDiskUsage: '0',
percentUsage: '0'
})
})
})
})

0 comments on commit b8ced4b

Please sign in to comment.