squid-js/src/ocean/OceanVersions.ts

151 lines
4.5 KiB
TypeScript
Raw Normal View History

2019-06-20 00:20:09 +02:00
import * as keeperPackageJson from '@oceanprotocol/keeper-contracts/package.json'
import * as metadata from '../metadata.json'
2019-06-14 00:34:53 +02:00
2019-06-20 00:20:09 +02:00
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
2019-06-14 00:34:53 +02:00
export enum OceanPlatformTechStatus {
2019-06-20 00:20:09 +02:00
Loading = 'Loading',
Unknown = 'Unknown',
Stopped = 'Stopped',
Working = 'Working'
2019-06-14 00:34:53 +02:00
}
export interface OceanPlatformTech {
2019-06-14 00:34:53 +02:00
name: string
version?: string
commit?: string
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus
}
export interface OceanPlatformKeeperTech extends OceanPlatformTech {
2019-06-14 00:34:53 +02:00
network?: string
keeperVersion?: string
2019-06-20 00:20:09 +02:00
contracts?: { [contractName: string]: string }
2019-06-14 00:34:53 +02:00
}
export interface OceanPlatformVersions {
2019-06-14 00:34:53 +02:00
squid: OceanPlatformKeeperTech
aquarius: OceanPlatformTech
brizo: OceanPlatformKeeperTech
status: {
ok: boolean
contracts: boolean
2019-06-20 00:20:09 +02:00
network: boolean
2019-06-14 00:34:53 +02:00
}
}
/**
* Versions submodule of Ocean Protocol.
*/
export class OceanVersions extends Instantiable {
/**
* Returns the instance of OceanVersions.
* @return {Promise<OceanVersions>}
*/
2019-09-09 12:18:54 +02:00
public static async getInstance(config: InstantiableConfig): Promise<OceanVersions> {
2019-06-14 00:34:53 +02:00
const instance = new OceanVersions()
instance.setInstanceConfig(config)
return instance
}
public async get(): Promise<OceanPlatformVersions> {
const versions = {} as OceanPlatformVersions
2019-06-14 00:34:53 +02:00
// Squid
versions.squid = {
2019-06-20 00:20:09 +02:00
name: 'Squid-js',
version: metadata.version,
commit: metadata.commit,
2019-06-14 00:34:53 +02:00
status: OceanPlatformTechStatus.Working,
network: (await this.ocean.keeper.getNetworkName()).toLowerCase(),
keeperVersion: keeperPackageJson.version,
contracts: Object.values(await this.ocean.keeper.getAllInstances())
.filter((_) => !!_)
.reduce(
(acc, { contractName, address }) => ({
...acc,
[contractName]: address
}),
{}
)
2019-06-14 00:34:53 +02:00
}
// Brizo
try {
2019-06-20 00:20:09 +02:00
const {
contracts,
'keeper-version': keeperVersion,
network,
software: name,
version
} = await this.ocean.brizo.getVersionInfo()
2019-06-14 00:34:53 +02:00
versions.brizo = {
name,
status: OceanPlatformTechStatus.Working,
version,
contracts,
network,
2019-06-20 00:20:09 +02:00
keeperVersion: keeperVersion.replace(/^v/, '')
2019-06-14 00:34:53 +02:00
}
} catch {
versions.brizo = {
2019-06-20 00:20:09 +02:00
name: 'Brizo',
status: OceanPlatformTechStatus.Stopped
2019-06-14 00:34:53 +02:00
}
}
// Aquarius
try {
2019-09-09 12:18:54 +02:00
const { software: name, version } = await this.ocean.aquarius.getVersionInfo()
2019-06-14 00:34:53 +02:00
versions.aquarius = {
name,
status: OceanPlatformTechStatus.Working,
2019-06-20 00:20:09 +02:00
version
2019-06-14 00:34:53 +02:00
}
} catch {
versions.aquarius = {
2019-06-20 00:20:09 +02:00
name: 'Aquarius',
status: OceanPlatformTechStatus.Stopped
2019-06-14 00:34:53 +02:00
}
}
// Status
const techs: OceanPlatformKeeperTech[] = Object.values(versions as any)
const networks = techs
2019-06-20 00:20:09 +02:00
.map(({ network }) => network)
.filter((_) => !!_)
2019-06-20 00:20:09 +02:00
.reduce((acc, network) => ({ ...acc, [network]: true }), {})
2019-06-14 00:34:53 +02:00
let contractStatus = true
const contractList = techs.map(({ contracts }) => contracts).filter((_) => !!_)
2019-06-14 12:07:35 +02:00
Array.from(contractList.map(Object.keys))
2019-06-14 00:34:53 +02:00
.reduce((acc, _) => [...acc, ..._], [])
.filter((_, i, list) => list.indexOf(_) === i)
.forEach((name) => {
2019-06-14 00:34:53 +02:00
let address
2019-06-14 12:07:35 +02:00
contractList
.map((_) => _[name])
.forEach((_) => {
2019-06-14 00:34:53 +02:00
if (!address) {
address = _
return
}
if (address !== _) {
2019-09-13 13:38:23 +02:00
this.logger.warn(`Error on contract ${name}`)
2019-06-14 00:34:53 +02:00
contractStatus = false
}
})
})
2019-06-14 12:07:35 +02:00
versions.status = {
2019-09-09 12:18:54 +02:00
ok: !techs.find(({ status }) => status !== OceanPlatformTechStatus.Working),
2019-06-14 00:34:53 +02:00
network: Object.keys(networks).length === 1,
2019-06-20 00:20:09 +02:00
contracts: contractStatus
2019-06-14 00:34:53 +02:00
}
return versions
}
}