2019-06-14 00:34:53 +02:00
|
|
|
import * as keeperPackageJson from "@oceanprotocol/keeper-contracts/package.json"
|
2019-06-17 16:14:54 +02:00
|
|
|
import * as metadata from "../metadata.json"
|
2019-06-14 00:34:53 +02:00
|
|
|
|
|
|
|
import { Instantiable, InstantiableConfig } from "../Instantiable.abstract"
|
|
|
|
|
|
|
|
export enum OceanPlatformTechStatus {
|
2019-06-14 12:07:35 +02:00
|
|
|
Loading = "Loading",
|
|
|
|
Unknown = "Unknown",
|
|
|
|
Stopped = "Stopped",
|
|
|
|
Working = "Working",
|
2019-06-14 00:34:53 +02:00
|
|
|
}
|
|
|
|
|
2019-06-17 16:14:54 +02:00
|
|
|
export interface OceanPlatformTech {
|
2019-06-14 00:34:53 +02:00
|
|
|
name: string
|
|
|
|
version?: string
|
2019-06-17 16:14:54 +02:00
|
|
|
commit?: string
|
2019-06-14 00:34:53 +02:00
|
|
|
status: OceanPlatformTechStatus
|
|
|
|
}
|
|
|
|
|
2019-06-17 16:14:54 +02:00
|
|
|
export interface OceanPlatformKeeperTech extends OceanPlatformTech {
|
2019-06-14 00:34:53 +02:00
|
|
|
network?: string
|
|
|
|
keeperVersion?: string
|
|
|
|
contracts?: {[contractName: string]: string}
|
|
|
|
}
|
|
|
|
|
2019-06-17 16:14:54 +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-14 12:07:35 +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>}
|
|
|
|
*/
|
|
|
|
public static async getInstance(config: InstantiableConfig): Promise<OceanVersions> {
|
|
|
|
const instance = new OceanVersions()
|
|
|
|
instance.setInstanceConfig(config)
|
|
|
|
|
|
|
|
return instance
|
|
|
|
}
|
|
|
|
|
|
|
|
public async get(): Promise<OceanPlatformVersions> {
|
2019-06-17 16:14:54 +02:00
|
|
|
const versions = {} as OceanPlatformVersions
|
2019-06-14 00:34:53 +02:00
|
|
|
|
|
|
|
// Squid
|
|
|
|
versions.squid = {
|
2019-06-14 12:07:35 +02:00
|
|
|
name: "Squid-js",
|
2019-06-17 16:14:54 +02:00
|
|
|
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())
|
|
|
|
.reduce((acc, {contractName, address}) => ({
|
|
|
|
...acc,
|
|
|
|
[contractName]: address,
|
2019-06-14 12:07:35 +02:00
|
|
|
}), {}),
|
2019-06-14 00:34:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Brizo
|
|
|
|
try {
|
2019-06-14 12:07:35 +02:00
|
|
|
const {contracts, "keeper-version": keeperVersion, network, software: name, version} =
|
2019-06-14 00:34:53 +02:00
|
|
|
await this.ocean.brizo.getVersionInfo()
|
|
|
|
versions.brizo = {
|
|
|
|
name,
|
|
|
|
status: OceanPlatformTechStatus.Working,
|
|
|
|
version,
|
|
|
|
contracts,
|
|
|
|
network,
|
2019-06-14 12:07:35 +02:00
|
|
|
keeperVersion: keeperVersion.replace(/^v/, ""),
|
2019-06-14 00:34:53 +02:00
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
versions.brizo = {
|
2019-06-14 12:07:35 +02:00
|
|
|
name: "Brizo",
|
2019-06-14 00:34:53 +02:00
|
|
|
status: OceanPlatformTechStatus.Stopped,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Aquarius
|
|
|
|
try {
|
|
|
|
const {software: name, version} = await this.ocean.aquarius.getVersionInfo()
|
|
|
|
versions.aquarius = {
|
|
|
|
name,
|
|
|
|
status: OceanPlatformTechStatus.Working,
|
|
|
|
version,
|
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
versions.aquarius = {
|
2019-06-14 12:07:35 +02:00
|
|
|
name: "Aquarius",
|
2019-06-14 00:34:53 +02:00
|
|
|
status: OceanPlatformTechStatus.Stopped,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Status
|
|
|
|
const techs: OceanPlatformKeeperTech[] = Object.values(versions as any)
|
|
|
|
|
|
|
|
const networks = techs
|
|
|
|
.map(({network}) => network)
|
2019-06-14 12:07:35 +02:00
|
|
|
.filter((_) => !!_)
|
2019-06-14 00:34:53 +02:00
|
|
|
.reduce((acc, network) => ({...acc, [network]: true}), {})
|
|
|
|
|
|
|
|
let contractStatus = true
|
2019-06-14 12:07:35 +02:00
|
|
|
const contractList = techs
|
2019-06-14 00:34:53 +02:00
|
|
|
.map(({contracts}) => contracts)
|
2019-06-14 12:07:35 +02:00
|
|
|
.filter((_) => !!_)
|
|
|
|
Array.from(contractList.map(Object.keys))
|
2019-06-14 00:34:53 +02:00
|
|
|
.reduce((acc, _) => [...acc, ..._], [])
|
|
|
|
.filter((_, i, list) => list.indexOf(_) === i)
|
2019-06-14 12:07:35 +02:00
|
|
|
.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 !== _) {
|
|
|
|
contractStatus = false
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2019-06-14 12:07:35 +02:00
|
|
|
versions.status = {
|
2019-06-14 00:34:53 +02:00
|
|
|
ok: !techs.find(({status}) => status !== OceanPlatformTechStatus.Working),
|
|
|
|
network: Object.keys(networks).length === 1,
|
|
|
|
contracts: contractStatus,
|
|
|
|
}
|
|
|
|
|
|
|
|
return versions
|
|
|
|
}
|
|
|
|
}
|