feat(labelratio): new feature to monitor label ratio from auto and manual
this was designed more for dayton but could be used for all plants
This commit is contained in:
32
database/schema/ratios.ts
Normal file
32
database/schema/ratios.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import {
|
||||
integer,
|
||||
jsonb,
|
||||
pgTable,
|
||||
text,
|
||||
timestamp,
|
||||
uniqueIndex,
|
||||
uuid,
|
||||
} from "drizzle-orm/pg-core";
|
||||
import { createSelectSchema } from "drizzle-zod";
|
||||
|
||||
export const labelRatio = pgTable(
|
||||
"labelRatio",
|
||||
{
|
||||
ratio_id: uuid(" ratio_id").defaultRandom().primaryKey(),
|
||||
name: text("name").default("labels"),
|
||||
autoLabel: integer("autoLabel").default(1),
|
||||
manualLabel: integer("manualLabel").default(1),
|
||||
lastReset: timestamp().defaultNow(),
|
||||
},
|
||||
(table) => [
|
||||
// uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`),
|
||||
uniqueIndex("labelname").on(table.name),
|
||||
]
|
||||
);
|
||||
|
||||
// Schema for inserting a user - can be used to validate API requests
|
||||
// export const insertRolesSchema = createInsertSchema(roles, {
|
||||
// name: z.string().min(3, {message: "Role name must be more than 3 letters"}),
|
||||
// });
|
||||
// Schema for selecting a Expenses - can be used to validate API responses
|
||||
export const selectRolesSchema = createSelectSchema(labelRatio);
|
||||
23
server/services/ocp/controller/labeling/getLabelRatio.ts
Normal file
23
server/services/ocp/controller/labeling/getLabelRatio.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { db } from "../../../../../database/dbclient.js";
|
||||
import { labelRatio } from "../../../../../database/schema/ratios.js";
|
||||
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
||||
export const getLabelRatio = async () => {
|
||||
const { data: labelInfo, error: labelError } = await tryCatch(
|
||||
db.select().from(labelRatio)
|
||||
);
|
||||
|
||||
if (labelError) {
|
||||
return {
|
||||
success: false,
|
||||
message: "There was an error getting the labels",
|
||||
data: [labelError],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: "Current labels order by upd_Date.",
|
||||
count: labelInfo.length,
|
||||
data: labelInfo,
|
||||
};
|
||||
};
|
||||
53
server/services/ocp/controller/labeling/labelRatio.ts
Normal file
53
server/services/ocp/controller/labeling/labelRatio.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { sql } from "drizzle-orm";
|
||||
import { db } from "../../../../../database/dbclient.js";
|
||||
import { labelRatio } from "../../../../../database/schema/ratios.js";
|
||||
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
||||
import { createLog } from "../../../logger/logger.js";
|
||||
|
||||
export const autoLabelCreated = async () => {
|
||||
const { error } = await tryCatch(
|
||||
db
|
||||
.insert(labelRatio)
|
||||
.values({
|
||||
name: "label",
|
||||
autoLabel: 1,
|
||||
})
|
||||
.onConflictDoUpdate({
|
||||
target: labelRatio.name,
|
||||
set: { autoLabel: sql`${labelRatio.autoLabel} + 1` },
|
||||
})
|
||||
);
|
||||
|
||||
if (error) {
|
||||
createLog(
|
||||
"error",
|
||||
"labeling",
|
||||
"ocp",
|
||||
"There was an error updating auto label ratio"
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export const manualLabelCreated = async () => {
|
||||
const { error } = await tryCatch(
|
||||
db
|
||||
.insert(labelRatio)
|
||||
.values({
|
||||
name: "label",
|
||||
manualLabel: 1,
|
||||
})
|
||||
.onConflictDoUpdate({
|
||||
target: labelRatio.name,
|
||||
set: { manualLabel: sql`${labelRatio.manualLabel} + 1` },
|
||||
})
|
||||
);
|
||||
|
||||
if (error) {
|
||||
createLog(
|
||||
"error",
|
||||
"labeling",
|
||||
"ocp",
|
||||
"There was an error updating manual Label Ratio"
|
||||
);
|
||||
}
|
||||
};
|
||||
@@ -7,6 +7,7 @@ import { unPausePrinter } from "../../utils/unpausePrinter.js";
|
||||
|
||||
import { labelingProcess } from "../labeling/labelProcess.js";
|
||||
import { timeZoneFix } from "../../../../globalUtils/timeZoneFix.js";
|
||||
import { autoLabelCreated } from "../labeling/labelRatio.js";
|
||||
|
||||
let logLevel: string = process.env.LOG_LEVEL || "info";
|
||||
let errorCheck = false;
|
||||
@@ -132,6 +133,7 @@ export const printerStatus = async (p: any) => {
|
||||
|
||||
// sending over for labeling.
|
||||
labelingProcess({ printer: p });
|
||||
autoLabelCreated();
|
||||
} else if (tmp[2] === "0") {
|
||||
// printer was unpaused for the first time or made it here
|
||||
createLog(
|
||||
@@ -146,6 +148,7 @@ export const printerStatus = async (p: any) => {
|
||||
|
||||
// sending over for labeling.
|
||||
labelingProcess({ printer: p });
|
||||
autoLabelCreated();
|
||||
} else if (tmp[2] === "1") {
|
||||
// printer is paused and waiting
|
||||
createLog(
|
||||
|
||||
@@ -4,6 +4,7 @@ import { tryCatch } from "../../../../../../globalUtils/tryCatch.js";
|
||||
import { createLog } from "../../../../../logger/logger.js";
|
||||
import { readTags } from "../../../../../rfid/controller/readTags.js";
|
||||
import { labelingProcess } from "../../../labeling/labelProcess.js";
|
||||
import { autoLabelCreated } from "../../../labeling/labelRatio.js";
|
||||
import { stapperFaulted, strapperFaults } from "./strapperFault.js";
|
||||
|
||||
export let cameraPalletCheck = 20;
|
||||
@@ -85,6 +86,7 @@ export const labelerTagRead = async (tagData: any) => {
|
||||
cameraPalletCheck - currentPalletCheck
|
||||
}.`
|
||||
);
|
||||
autoLabelCreated();
|
||||
} else {
|
||||
currentPalletCheck = 0;
|
||||
createLog(
|
||||
|
||||
39
server/services/ocp/routes/labeling/getLabelRatio.ts
Normal file
39
server/services/ocp/routes/labeling/getLabelRatio.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
// an external way to creating logs
|
||||
import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi";
|
||||
import { responses } from "../../../../globalUtils/routeDefs/responses.js";
|
||||
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
||||
import { apiHit } from "../../../../globalUtils/apiHits.js";
|
||||
import { getLabelRatio } from "../../controller/labeling/getLabelRatio.js";
|
||||
|
||||
const app = new OpenAPIHono({ strict: false });
|
||||
|
||||
app.openapi(
|
||||
createRoute({
|
||||
tags: ["ocp"],
|
||||
summary: "Returns current active lots that are tech released",
|
||||
method: "get",
|
||||
path: "/labelratio",
|
||||
responses: responses(),
|
||||
}),
|
||||
async (c) => {
|
||||
const { data: labelData, error: labelError } = await tryCatch(
|
||||
getLabelRatio()
|
||||
);
|
||||
apiHit(c, { endpoint: "/labelratio" });
|
||||
|
||||
if (labelError) {
|
||||
return c.json({
|
||||
success: false,
|
||||
message: "There was an error getting the printers",
|
||||
});
|
||||
}
|
||||
|
||||
return c.json({
|
||||
success: labelData.success,
|
||||
message: labelData.message,
|
||||
count: labelData.count,
|
||||
data: labelData.data,
|
||||
});
|
||||
}
|
||||
);
|
||||
export default app;
|
||||
@@ -4,6 +4,7 @@ import { responses } from "../../../../globalUtils/routeDefs/responses.js";
|
||||
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
||||
import { labelingProcess } from "../../controller/labeling/labelProcess.js";
|
||||
import { apiHit } from "../../../../globalUtils/apiHits.js";
|
||||
import { manualLabelCreated } from "../../controller/labeling/labelRatio.js";
|
||||
|
||||
const app = new OpenAPIHono({ strict: false });
|
||||
|
||||
@@ -32,7 +33,7 @@ app.openapi(
|
||||
const { data: createLabel, error: labelError } = await tryCatch(
|
||||
labelingProcess({ line: bodyData.line })
|
||||
);
|
||||
|
||||
manualLabelCreated();
|
||||
if (labelError) {
|
||||
return c.json({
|
||||
success: false,
|
||||
|
||||
@@ -14,6 +14,7 @@ import { rfidTags } from "../../../../../database/schema/rfidTags.js";
|
||||
import { and, eq, gte, ne, sql } from "drizzle-orm";
|
||||
import { rfidReaders } from "../../../../../database/schema/rfidReaders.js";
|
||||
import { shouldSkipByCooldown } from "../../utils/rateLimit.js";
|
||||
import { autoLabelCreated } from "../../../ocp/controller/labeling/labelRatio.js";
|
||||
|
||||
export const wrapperStuff = async (tagData: any) => {
|
||||
console.log("WrapperTag", tagData[0].tag);
|
||||
@@ -152,7 +153,7 @@ export const wrapperStuff = async (tagData: any) => {
|
||||
const genlabel = await labelingProcess({
|
||||
line: lineNum.toString(),
|
||||
});
|
||||
|
||||
autoLabelCreated();
|
||||
console.log(genlabel);
|
||||
if (genlabel?.success) {
|
||||
const createPrintData = {
|
||||
|
||||
Reference in New Issue
Block a user