Print audit system
Professional internship · analysis and development
Internal platform that logs every print job, tracks supplies and allocates costs by department.
Technologies
- C# / .NET
- SQL Server
- SNMP
- PowerShell
- Active Directory
The problem
A company with sites spread across the province had nearly a hundred printers from several brands, split between print servers and directly connected devices, with no central record of who printed what, how much, or at what cost.
There was also no way to know in time which devices were about to run out of toner, or to allocate printing costs to each of the organization's cost centers.
The solution
A centralized platform that runs on its own, with no manual work:
- Event collector: every few minutes it reads the print logs on the servers and stores each job: user, source computer, printer, pages and color.
- Printer telemetry: it queries every network device and stores supply levels, the page counter and the device status.
- Costing engine: it applies the current rate to each job and calculates its cost.
- Cost centers: it syncs users with the company directory so every print job is attributed to its department.
- Web dashboard: it brings the information together, with a traffic-light view of critical supplies to get ahead of shortages.
My role
A 200-hour supervised professional internship for my Systems Engineering degree. I was the system's analyst and developer: I surveyed the printer fleet, designed the data model, built every module, tested it on the company's real infrastructure and documented the work, supervised by a tutor from the organization and another from the university.
Key features
- Every print job audited: who printed, from which computer, on which printer, how many pages and whether it was in color.
- Near real-time supply status: toner or ink level, page counter and status for every network printer.
- Cost per job: rates with effective dates, so a price change never alters the cost of past prints.
- Costs by cost center: each person belongs to a department, and their usage is attributed to it even on shared printers.
- Automated processes: collection, costing and syncing run on their own, with a daily log of every run.
Challenges and decisions
Data Windows doesn't report. The print log doesn't say whether a job was in color. I solved it by matching each job with a second event from the same system. If that data is missing, the job stays undefined instead of being assumed black and white, so costs are never underestimated.
Compatibility with an older server. The usual libraries for reading events didn't work on one of the servers, so I used Windows' native tool instead. Reading is incremental, and the data model prevents the same job from being loaded twice.
Fewer dependencies, more control. Instead of adding an external library, I wrote my own SNMP client with the two operations needed. The collectors have a single external dependency, and they query several printers in parallel with timeouts tuned for sites on slow links.
Results
- In its first four weeks the system logged nearly 46,000 print jobs (over 140,000 pages) from 373 users.
- 99 printers monitored, across four brands.
- 98.6% of jobs could already be attributed to a cost center validated against the company directory.
- Delivered on schedule, with daily, verified database backups.