checkAndPublish workflow

This commit is contained in:
Andrzej Stepien 2023-08-11 17:38:02 +02:00
parent 5dc2a3fa0c
commit 56266b4872
9 changed files with 52 additions and 62 deletions

44
src/checkAndPublish.mjs Normal file
View File

@ -0,0 +1,44 @@
import getNewPrompt from "./getNewPrompt.mjs"
import createNote from "./createNote.mjs"
import makeText from "./makeText.mjs"
import insertPublished from "./insertPublished.mjs"
import logger from "./logger.mjs"
import todaysPromptAlreadyPublished from "./todaysPromptAlreadyPublished.mjs"
const maxCount = 30000000
const minCount = 200000
const spamMode = false
export default async function checkAndPublish () {
logger.trace("checkAndPublish called")
logger.trace(todaysPromptAlreadyPublished())
if(!await todaysPromptAlreadyPublished()){
try {
const prompt = await getNewPrompt({ minCount, maxCount, rarityBias: 0.7 })
try {
const text = makeText(prompt)
try {
const note = await createNote(text)
try {
await insertPublished(note, prompt.word)
} catch (error) {
logger.error(error, 'insertPublished failed!')
}
} catch (error) {
logger.error(error, 'createNote failed!')
}
} catch (error) {
logger.error(error, 'makeText failed!')
}
} catch (error) {
logger.error(error,'getNewPrompt failed!')
}
} else {
logger.trace("today's prompt has already been published")
}
}

View File

@ -14,7 +14,7 @@ setGlobalDispatcher(agent)
export default async function createNote(text) {
const childLogger = logger.child({text})
childLogger.trace("createNote called")
const url = 'http://localhost:3000/api/notes/create'
const url = 'https://localhost:80/api/notes/create'
const params = {
text: text,
}
@ -33,6 +33,7 @@ export default async function createNote(text) {
return res.json()
})
.then(data => {
childLogger.trace(data, "note created successfully")
return data
})
.catch(error =>{

View File

@ -1,38 +0,0 @@
import getNewPrompt from "./getNewPrompt.mjs"
import createNote from "./createNote.mjs"
import makeText from "./makeText.mjs"
import insertPublished from "./insertPublished.mjs"
import logger from "./logger.mjs"
const maxCount = 30000000
const minCount = 200000
export default async function daily () {
try {
const prompt = await getNewPrompt({ minCount, maxCount, rarityBias: 0.7 })
try {
const text = makeText(prompt)
try {
const note = await createNote(text)
try {
await insertPublished(note, prompt.word)
} catch (error) {
logger.error(error, 'insertPublished failed!')
}
} catch (error) {
logger.error(error, 'createNote failed!')
}
} catch (error) {
logger.error(error, 'makeText failed!')
}
} catch (error) {
logger.error(error,'getNewPrompt failed!')
}
}

Binary file not shown.

View File

@ -55,6 +55,7 @@ export default async function insertPublished(res, word){
date: isoDate(sampleRes.createdNote.createdAt)
})
.then(res => {
childLogger.trace("succesful insertion into table: published")
return res
})
.catch(error => {throw error})

View File

@ -10,7 +10,7 @@ const __dirname = path.dirname(__filename);
// });
export default pino({
level: process.env.PINO_LOG_LEVEL || 'info',
level: process.env.PINO_LOG_LEVEL || 'trace',
formatters: {
level: (label) => {
return { severity: label.toUpperCase() };

View File

@ -1,19 +0,0 @@
import daily from "./daily.mjs"
import logger from "./logger.mjs"
const maxCount = 30000000
const minCount = 200000
const spam = async ()=>{
await daily()
}
const delay = ms => new Promise(res=>{setTimeout(res,ms)})
do{
await delay(1000)
await spam()
logger.trace("Spam!")
}while(true)

View File

@ -1,8 +1,11 @@
import cron from 'node-cron'
import logger from './logger.mjs';
import checkAndPublish from './checkAndPublish.mjs';
export default function start(){
logger.trace("start() called")
cron.schedule('* * * * *', () => {
logger.trace('running a task every minute');
checkAndPublish()
logger.trace('one-minute cron call');
});
}

View File

@ -2,8 +2,6 @@ import { db } from "./db.mjs";
import { isoDate } from "./utilities.mjs";
import logger from "./logger.mjs";
export default async function todaysPromptAlreadyPublished() {
const childLogger = logger.child()
childLogger.trace("todaysPromptAlreadyPublished called")
const number = await db('published')
.count('* as count')
.where('date', isoDate())