chore(root): remove old package

This commit is contained in:
Ben Allfree 2024-06-30 07:02:21 -07:00
parent a1fcc9e217
commit 4eb1a1a0a1
5 changed files with 0 additions and 253 deletions

View File

@ -1,5 +0,0 @@
*
!**/*.ts
!package.json
!readme.md
!LICENSE.md

View File

@ -1,25 +0,0 @@
{
"name": "@pockethost/plugin-file-instance-logger",
"version": "0.0.1",
"description": "",
"main": "src/index.ts",
"module": "src/index.ts",
"types": "src/index.ts",
"type": "module",
"scripts": {
"check-types": "tsc --noEmit "
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/tail": "^2.2.2",
"tail": "^2.2.6",
"type-fest": "^4.6.0",
"typescript": "^5.4.5",
"winston": "^3.11.0"
},
"dependencies": {
"pockethost": "workspace:^"
}
}

View File

@ -1,176 +0,0 @@
import * as fs from 'fs'
import {
LoggerService,
asyncExitHook,
createCleanupManager,
mergeConfig,
mkInstanceDataPath,
stringify,
} from 'pockethost/core'
import { Tail } from 'tail'
import * as winston from 'winston'
type UnsubFunc = () => void
export type InstanceLoggerApi = {
info: (msg: string) => void
error: (msg: string) => void
tail: (linesBack: number, data: (line: winston.LogEntry) => void) => UnsubFunc
shutdown: () => void
}
export type InstanceLoggerOptions = {
ttl: number
}
const loggers: {
[key: string]: InstanceLoggerApi
} = {}
export function InstanceLogger(
instanceId: string,
target: string,
options: Partial<InstanceLoggerOptions> = {},
) {
const { dbg, info } = LoggerService().create(instanceId).breadcrumb(target)
const { ttl } = mergeConfig<InstanceLoggerOptions>({ ttl: 0 }, options)
dbg({ ttl })
const loggerKey = `${instanceId}_${target}`
if (loggers[loggerKey]) {
dbg(`Logger exists, using cache`)
return loggers[loggerKey]!
}
const logDirectory = mkInstanceDataPath(instanceId, `logs`)
if (!fs.existsSync(logDirectory)) {
dbg(`Creating ${logDirectory}`)
fs.mkdirSync(logDirectory, { recursive: true })
}
const logFile = mkInstanceDataPath(instanceId, `logs`, `${target}.log`)
const cm = createCleanupManager()
const fileTransport = new winston.transports.File({
filename: logFile,
maxsize: 100 * 1024 * 1024, // 100MB
maxFiles: 10,
tailable: true,
zippedArchive: true,
})
const logger = winston.createLogger({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json(),
winston.format.printf((info) => {
return stringify({
stream: info.level === 'info' ? 'stdout' : 'stderr',
time: info.timestamp,
message: info.message,
})
}),
),
transports: [fileTransport],
})
cm.add(() => {
dbg(`Deleting and closing`)
delete loggers[loggerKey]
fileTransport.close?.()
logger.close()
})
const { error, warn } = LoggerService()
.create('InstanceLogger')
.breadcrumb(instanceId)
.breadcrumb(target)
const resetTtl = (() => {
let tid: ReturnType<typeof setTimeout>
return () => {
if (!ttl) return
clearTimeout(tid)
tid = setTimeout(() => {
dbg(`Logger timeout`)
api.shutdown()
}, ttl)
}
})()
const api = {
info: (msg: string) => {
resetTtl()
dbg(`info: `, msg)
logger.info(msg)
},
error: (msg: string) => {
resetTtl()
dbg(`error: `, msg)
logger.error(msg)
},
tail: (
linesBack: number,
data: (line: winston.LogEntry) => void,
): UnsubFunc => {
if (ttl) {
throw new Error(`Cannot tail with ttl active`)
}
const logFile = mkInstanceDataPath(instanceId, `logs`, `${target}.log`)
let tid: any
cm.add(() => clearTimeout(tid))
const check = () => {
try {
const tail = new Tail(logFile, { nLines: linesBack })
tail.on('line', (line) => {
try {
const entry = JSON.parse(line)
data(entry)
} catch (e) {
data({
level: 'info',
message: line,
time: new Date().toISOString(),
})
}
})
tail.on('error', (e) => {
error(`Caught a tail error ${e}`)
})
cm.add(() => tail.unwatch())
} catch (e) {
warn(e)
tid = setTimeout(check, 1000)
}
}
check()
const unsub = asyncExitHook(() => cm.shutdown())
return () => {
cm.shutdown()
unsub()
}
},
shutdown: () => cm.shutdown(),
}
loggers[loggerKey] = api
return api
}
// // Example usage
// const loggerInstance = InstanceLogger('123', 'my-target')
// loggerInstance.info('This is an info message')
// loggerInstance.error('This is an error message')
// const unsubscribe = loggerInstance.tail(10, (line) => {
// console.log(line)
// })
// // Later when you want to stop listening to the tail:
// // unsubscribe();

View File

@ -1,24 +0,0 @@
import { join } from 'path'
import {
LoggerService,
PH_HOME,
PocketHostPlugin,
Settings,
mkPath,
} from 'pockethost/core'
const _HOME_DIR =
process.env.PH_SIL_HOME || join(PH_HOME(), `plugin-file-instance-logger`)
const settings = Settings({
PH_FIL_HOME: mkPath(_HOME_DIR, { create: true }),
})
const logger = LoggerService().create('plugin-file-instance-logger')
export const { dbg } = logger
const plugin: PocketHostPlugin = async ({ registerAction, registerFilter }) => {
dbg(`initializing plugin-file-instance-logger`)
}
export default plugin

View File

@ -1,23 +0,0 @@
{
"compilerOptions": {
"lib": ["ES2021.String"],
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "node",
"noUncheckedIndexedAccess": true,
"strictNullChecks": true,
"noEmit": true
},
"include": [
"**/*.ts",
"../plugin-instance-logger-file-realtime-tail/src/RealtimeLog.ts"
]
}