less noisy logging

This commit is contained in:
De Facto 2021-02-20 18:00:17 +08:00
parent d9aecb68c2
commit 2a5f3b3ae6
8 changed files with 53 additions and 43 deletions

View File

@ -19,7 +19,7 @@ import {
import FluxAggregator from "./FluxAggregator" import FluxAggregator from "./FluxAggregator"
import { AggregatorConfig, IAggregatorConfig } from "./schema" import { AggregatorConfig, IAggregatorConfig } from "./schema"
import { jsonReplacer, jsonReviver } from "./json" import { jsonReplacer, jsonReviver } from "./json"
import { log } from "./log"
interface OracleDeployInfo { interface OracleDeployInfo {
pubkey: PublicKey pubkey: PublicKey
@ -72,35 +72,40 @@ export class Deployer {
} }
async deployProgram() { async deployProgram() {
if (this.state.programID) { if (!this.state.programID) {
console.log("program deployed") const programBinary = fs.readFileSync(FLUX_AGGREGATOR_SO)
return
console.log(`deploying ${FLUX_AGGREGATOR_SO}...`)
const bpfLoader = new BPFLoader(this.wallet)
const account = await bpfLoader.load(programBinary)
this.state.programID = account.publicKey
} }
const programBinary = fs.readFileSync(FLUX_AGGREGATOR_SO) log.info("Program deployed", {
programID: this.state.programID.toBase58(),
console.log(`deploying ${FLUX_AGGREGATOR_SO}...`) })
const bpfLoader = new BPFLoader(this.wallet)
const account = await bpfLoader.load(programBinary)
this.state.programID = account.publicKey
} }
async createAggregators() { async createAggregators() {
for (let key of Object.keys(this.setup.aggregators)) { for (let name of Object.keys(this.setup.aggregators)) {
const aggregatorSetup = this.setup.aggregators[key] const aggregatorSetup = this.setup.aggregators[name]
let info = this.state.aggregators[key] let info = this.state.aggregators[name]
if (!info) { if (!info) {
this.state.aggregators[key] = await this.createAggregator( this.state.aggregators[name] = await this.createAggregator(
key, name,
aggregatorSetup aggregatorSetup
) )
// get the value again to wrap it in proxy... // get the value again to wrap it in proxy...
info = this.state.aggregators[key] info = this.state.aggregators[name]
} }
console.log(`${key} aggregator deployed`) log.info("Aggregator deployed", {
name,
aggregator: info.pubkey.toBase58(),
})
for (let oracleName of aggregatorSetup.oracles || []) { for (let oracleName of aggregatorSetup.oracles || []) {
const oracleSetup = this.setup.oracles[oracleName] const oracleSetup = this.setup.oracles[oracleName]
// TODO: check that key exists // TODO: check that key exists
@ -110,7 +115,7 @@ export class Deployer {
oinfo = await this.createOracle(info, oracleName, oracleSetup) oinfo = await this.createOracle(info, oracleName, oracleSetup)
info.oracles[oracleName] = oinfo info.oracles[oracleName] = oinfo
} }
console.log(`${key} added oracle:`, oracleSetup.owner) log.info(`Oracle added`, { name, oracleName })
} }
} }
} }

View File

@ -59,7 +59,6 @@ export class PriceFeeder {
} }
) )
console.log("start price feeding:", name)
submitter.start() submitter.start()
} }
} }

View File

@ -8,14 +8,8 @@ import { sleep } from "./utils"
import FluxAggregator from "./FluxAggregator" import FluxAggregator from "./FluxAggregator"
import { createLogger, Logger } from "winston" import { createLogger, Logger } from "winston"
import logger from "winston"
logger.add(
new logger.transports.Console({
format: logger.format.simple(),
level: "debug",
})
)
import { log } from "./log"
import { IPriceFeed } from "./feeds" import { IPriceFeed } from "./feeds"
// allow oracle to start a new round after this many slots. each slot is about 500ms // allow oracle to start a new round after this many slots. each slot is about 500ms
@ -60,7 +54,7 @@ export class Submitter {
this.aggregator.answerSubmissions this.aggregator.answerSubmissions
) )
this.logger = logger.child({ this.logger = log.child({
aggregator: this.aggregator.config.description, aggregator: this.aggregator.config.description,
}) })
@ -142,15 +136,15 @@ export class Submitter {
// The round is stale. start a new round if possible, or wait for another // The round is stale. start a new round if possible, or wait for another
// oracle to start // oracle to start
this.logger.info("Starting a new round")
const oracle = await Oracle.load(this.oraclePK) const oracle = await Oracle.load(this.oraclePK)
if (oracle.canStartNewRound(round.id)) { if (oracle.canStartNewRound(round.id)) {
this.logger.info("Starting a new round")
return this.submitCurrentValue(round.id.addn(1)) return this.submitCurrentValue(round.id.addn(1))
} }
} }
private async onAggregatorStateUpdate() { private async onAggregatorStateUpdate() {
if (this.canSubmitToCurrentRound) { if (!this.canSubmitToCurrentRound) {
return return
} }
@ -173,7 +167,7 @@ export class Submitter {
return return
} }
this.logger.info("submit", { this.logger.info("Submit value", {
round: round.toString(), round: round.toString(),
value: value.toString(), value: value.toString(),
}) })
@ -193,7 +187,7 @@ export class Submitter {
}) })
} catch (err) { } catch (err) {
console.log(err) console.log(err)
this.logger.error("submit error", { this.logger.error("Submit error", {
err: err.toString(), err: err.toString(),
}) })
} }

View File

@ -2,6 +2,8 @@ import WebSocket from "ws"
import EventEmitter from "events" import EventEmitter from "events"
import { eventsIter } from "./utils" import { eventsIter } from "./utils"
import { log } from "./log"
export const UPDATE = "UPDATE" export const UPDATE = "UPDATE"
export interface IPrice { export interface IPrice {
@ -22,7 +24,7 @@ export function coinbase(pair: string): IPriceFeed {
// "btc:usd" => "BTC-USD" // "btc:usd" => "BTC-USD"
pair = pair.replace(":", "-").toUpperCase() pair = pair.replace(":", "-").toUpperCase()
ws.on("open", () => { ws.on("open", () => {
console.log(`${pair} price feed connected`) log.debug(`price feed connected`, { pair })
ws.send( ws.send(
JSON.stringify({ JSON.stringify({
type: "subscribe", type: "subscribe",
@ -34,8 +36,10 @@ export function coinbase(pair: string): IPriceFeed {
ws.on("message", async (data) => { ws.on("message", async (data) => {
const json = JSON.parse(data) const json = JSON.parse(data)
log.debug("price update", json)
if (!json || !json.price) { if (!json || !json.price) {
return console.log(data) return
} }
const price: IPrice = { const price: IPrice = {
decimals: 2, decimals: 2,
@ -47,7 +51,7 @@ export function coinbase(pair: string): IPriceFeed {
ws.on("close", (err) => { ws.on("close", (err) => {
// TODO: automatic reconnect // TODO: automatic reconnect
console.error(`websocket closed: ${err}`) log.debug(`price feed closed`, { pair, err: err.toString() })
process.exit(1) process.exit(1)
}) })

12
src/log.ts Normal file
View File

@ -0,0 +1,12 @@
import logger from "winston"
import { format } from "winston"
logger.add(
new logger.transports.Console({
// format: logger.format.cli(),
format: format.combine(format.cli(), format.simple()),
level: process.env.LOG_LEVEL?.toLocaleLowerCase() || "info",
})
)
export const log = logger

View File

@ -20,10 +20,7 @@ export function stateFromJSON<T extends Object>(
const data = fs.readFileSync(filepath, "utf8") const data = fs.readFileSync(filepath, "utf8")
// TODO: support custom revive // TODO: support custom revive
root = JSON.parse(data, opts.reviver as any) root = JSON.parse(data, opts.reviver as any)
console.log(`Loaded state object: ${filepath}`) } catch (err) {}
} catch (err) {
console.log(`Init state object: ${filepath}`)
}
function save() { function save() {
// should be sync to avoid write races // should be sync to avoid write races

View File

@ -38,7 +38,6 @@ export async function walletFromEnv(
} }
const wallet = await Wallet.fromMnemonic(mnemonic, conn) const wallet = await Wallet.fromMnemonic(mnemonic, conn)
console.log("using wallet:", wallet.address)
return wallet return wallet
} }

View File

@ -3,11 +3,11 @@ dotenv.config()
import { AppContext, conn, network } from "./src/context" import { AppContext, conn, network } from "./src/context"
import { Deployer } from "./src/Deployer" import { Deployer } from "./src/Deployer"
import { coinbase } from "./src/feeds"
import { log } from "./src/log"
import { PriceFeeder } from "./src/PriceFeeder" import { PriceFeeder } from "./src/PriceFeeder"
async function main() { async function main() {
console.log({network})
const setupFile = `config/setup.${network}.json` const setupFile = `config/setup.${network}.json`
const deployFile = `deploy.${network}.json` const deployFile = `deploy.${network}.json`
const feederConfigFile = "feeder.json" const feederConfigFile = "feeder.json"
@ -24,7 +24,7 @@ async function main() {
const feeder = new PriceFeeder(deployFile, feederConfigFile, oracleWallet) const feeder = new PriceFeeder(deployFile, feederConfigFile, oracleWallet)
feeder.start() feeder.start()
console.log("done")
return return
// const spltoken = new SPLToken(adminWallet) // const spltoken = new SPLToken(adminWallet)