metrics fixes

This commit is contained in:
boufni95 2024-11-21 18:20:01 +00:00
parent bdee3426ae
commit de91573f2e
8 changed files with 83 additions and 5 deletions

View file

@ -983,6 +983,9 @@ The nostr server will send back a message response, and inside the body there wi
### LndGetInfoResponse ### LndGetInfoResponse
- __alias__: _string_ - __alias__: _string_
- __synced_to_chain__: _boolean_
- __synced_to_graph__: _boolean_
- __watchdog_barking__: _boolean_
### LndMetrics ### LndMetrics
- __nodes__: ARRAY of: _[LndNodeMetrics](#LndNodeMetrics)_ - __nodes__: ARRAY of: _[LndNodeMetrics](#LndNodeMetrics)_

View file

@ -305,7 +305,10 @@ type LndGetInfoRequest struct {
Nodeid int64 `json:"nodeId"` Nodeid int64 `json:"nodeId"`
} }
type LndGetInfoResponse struct { type LndGetInfoResponse struct {
Alias string `json:"alias"` Alias string `json:"alias"`
Synced_to_chain bool `json:"synced_to_chain"`
Synced_to_graph bool `json:"synced_to_graph"`
Watchdog_barking bool `json:"watchdog_barking"`
} }
type LndMetrics struct { type LndMetrics struct {
Nodes []LndNodeMetrics `json:"nodes"` Nodes []LndNodeMetrics `json:"nodes"`

View file

@ -1730,11 +1730,17 @@ export const LndGetInfoRequestValidate = (o?: LndGetInfoRequest, opts: LndGetInf
export type LndGetInfoResponse = { export type LndGetInfoResponse = {
alias: string alias: string
synced_to_chain: boolean
synced_to_graph: boolean
watchdog_barking: boolean
} }
export const LndGetInfoResponseOptionalFields: [] = [] export const LndGetInfoResponseOptionalFields: [] = []
export type LndGetInfoResponseOptions = OptionsBaseMessage & { export type LndGetInfoResponseOptions = OptionsBaseMessage & {
checkOptionalsAreSet?: [] checkOptionalsAreSet?: []
alias_CustomCheck?: (v: string) => boolean alias_CustomCheck?: (v: string) => boolean
synced_to_chain_CustomCheck?: (v: boolean) => boolean
synced_to_graph_CustomCheck?: (v: boolean) => boolean
watchdog_barking_CustomCheck?: (v: boolean) => boolean
} }
export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetInfoResponseOptions = {}, path: string = 'LndGetInfoResponse::root.'): Error | null => { export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetInfoResponseOptions = {}, path: string = 'LndGetInfoResponse::root.'): Error | null => {
if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message')
@ -1743,6 +1749,15 @@ export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetI
if (typeof o.alias !== 'string') return new Error(`${path}.alias: is not a string`) if (typeof o.alias !== 'string') return new Error(`${path}.alias: is not a string`)
if (opts.alias_CustomCheck && !opts.alias_CustomCheck(o.alias)) return new Error(`${path}.alias: custom check failed`) if (opts.alias_CustomCheck && !opts.alias_CustomCheck(o.alias)) return new Error(`${path}.alias: custom check failed`)
if (typeof o.synced_to_chain !== 'boolean') return new Error(`${path}.synced_to_chain: is not a boolean`)
if (opts.synced_to_chain_CustomCheck && !opts.synced_to_chain_CustomCheck(o.synced_to_chain)) return new Error(`${path}.synced_to_chain: custom check failed`)
if (typeof o.synced_to_graph !== 'boolean') return new Error(`${path}.synced_to_graph: is not a boolean`)
if (opts.synced_to_graph_CustomCheck && !opts.synced_to_graph_CustomCheck(o.synced_to_graph)) return new Error(`${path}.synced_to_graph: custom check failed`)
if (typeof o.watchdog_barking !== 'boolean') return new Error(`${path}.watchdog_barking: is not a boolean`)
if (opts.watchdog_barking_CustomCheck && !opts.watchdog_barking_CustomCheck(o.watchdog_barking)) return new Error(`${path}.watchdog_barking: custom check failed`)
return null return null
} }

View file

@ -191,6 +191,9 @@ message SetMockInvoiceAsPaidRequest {
message LndGetInfoResponse { message LndGetInfoResponse {
string alias = 1; string alias = 1;
bool synced_to_chain = 2;
bool synced_to_graph = 3;
bool watchdog_barking = 4;
} }
message BanUserRequest { message BanUserRequest {

42
src/e2e.ts Normal file
View file

@ -0,0 +1,42 @@
import 'dotenv/config'
import NewServer from '../proto/autogenerated/ts/express_server.js'
import GetServerMethods from './services/serverMethods/index.js'
import serverOptions from './auth.js';
import { LoadNosrtSettingsFromEnv } from './services/nostr/index.js'
import nostrMiddleware from './nostrMiddleware.js'
import { getLogger } from './services/helpers/logger.js';
import { initMainHandler } from './services/main/init.js';
import { LoadMainSettingsFromEnv } from './services/main/settings.js';
import { nip19 } from 'nostr-tools'
//@ts-ignore
const { nprofileEncode } = nip19
const start = async () => {
const log = getLogger({})
const mainSettings = LoadMainSettingsFromEnv()
const keepOn = await initMainHandler(log, mainSettings)
if (!keepOn) {
log("manual process ended")
return
}
const { apps, mainHandler, liquidityProviderInfo, wizard, adminManager } = keepOn
const serverMethods = GetServerMethods(mainHandler)
const nostrSettings = LoadNosrtSettingsFromEnv()
log("initializing nostr middleware")
const { Send } = nostrMiddleware(serverMethods, mainHandler,
{ ...nostrSettings, apps, clients: [liquidityProviderInfo] },
(e, p) => mainHandler.liquidityProvider.onEvent(e, p)
)
log("starting server")
mainHandler.attachNostrSend(Send)
mainHandler.StartBeacons()
const appNprofile = nprofileEncode({ pubkey: liquidityProviderInfo.publicKey, relays: nostrSettings.relays })
if (wizard) {
wizard.AddConnectInfo(appNprofile, nostrSettings.relays)
}
adminManager.setAppNprofile(appNprofile)
const Server = NewServer(serverMethods, serverOptions(mainHandler))
Server.Listen(mainSettings.servicePort)
}
start()

View file

@ -10,6 +10,7 @@ export class AdminManager {
storage: Storage storage: Storage
log = getLogger({ component: "adminManager" }) log = getLogger({ component: "adminManager" })
adminNpub = "" adminNpub = ""
@ -25,8 +26,8 @@ export class AdminManager {
this.storage = storage this.storage = storage
this.dataDir = mainSettings.storageSettings.dataDir this.dataDir = mainSettings.storageSettings.dataDir
this.adminNpubPath = getDataPath(this.dataDir, 'admin.npub') this.adminNpubPath = getDataPath(this.dataDir, 'admin.npub')
this.adminEnrollTokenPath = getDataPath(this.dataDir, '.admin_enroll') this.adminEnrollTokenPath = getDataPath(this.dataDir, 'admin.enroll')
this.adminConnectPath = getDataPath(this.dataDir, '.admin_connect') this.adminConnectPath = getDataPath(this.dataDir, 'admin.connect')
this.appNprofilePath = getDataPath(this.dataDir, 'app.nprofile') this.appNprofilePath = getDataPath(this.dataDir, 'app.nprofile')
this.start() this.start()
} }
@ -145,6 +146,17 @@ export class AdminManager {
} }
} }
async LndGetInfo(): Promise<Types.LndGetInfoResponse> {
const info = await this.lnd.GetInfo()
return {
alias: info.alias,
synced_to_chain: info.syncedToChain,
synced_to_graph: info.syncedToGraph,
watchdog_barking: this.lnd.outgoingOpsLocked
}
}
ListChannels = async (): Promise<Types.LndChannels> => { ListChannels = async (): Promise<Types.LndChannels> => {
const { channels } = await this.lnd.ListChannels(true) const { channels } = await this.lnd.ListChannels(true)
const { identityPubkey } = await this.lnd.GetInfo() const { identityPubkey } = await this.lnd.GetInfo()

View file

@ -27,6 +27,7 @@ export default class Handler {
const providers = await this.storage.liquidityStorage.GetTrackedProviders() const providers = await this.storage.liquidityStorage.GetTrackedProviders()
let lndTotal = 0 let lndTotal = 0
let providerTotal = 0 let providerTotal = 0
console.log({ providers })
providers.forEach(p => { providers.forEach(p => {
if (p.provider_type === 'lnd') { if (p.provider_type === 'lnd') {
lndTotal += p.latest_balance lndTotal += p.latest_balance

View file

@ -54,8 +54,7 @@ export default (mainHandler: Main): Types.ServerMethods => {
EncryptionExchange: async () => { }, EncryptionExchange: async () => { },
Health: async () => { await mainHandler.lnd.Health() }, Health: async () => { await mainHandler.lnd.Health() },
LndGetInfo: async ({ ctx }) => { LndGetInfo: async ({ ctx }) => {
const info = await mainHandler.lnd.GetInfo() return await mainHandler.adminManager.LndGetInfo()
return { alias: info.alias }
}, },
BanUser: async ({ ctx, req }) => { BanUser: async ({ ctx, req }) => {
const err = Types.BanUserRequestValidate(req, { const err = Types.BanUserRequestValidate(req, {