- Strip emojis from 47 markdown files across docs/, sql/, and root - Add docs/DOCS_CONSOLIDATION_PLAN.md with plan to reduce 45 docs to 8 - Establish no-emoji rule for documentation going forward 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.9 KiB
Machine Management - Quick Reference Guide
Last Updated: 2025-11-07
Quick Links
| Page | URL | Purpose |
|---|---|---|
| View All Machines | displaymachines.asp |
List of all equipment (excludes PCs) |
| View Machine | displaymachine.asp?machineid=XXX |
Display single machine details |
| Add Machine | addmachine.asp |
Create new machine |
| Edit Machine | editmachine.asp?machineid=XXX |
Edit existing machine |
File Structure
/home/camp/projects/windows/shopdb/
├── displaymachines.asp # List all machines (equipment only, no PCs)
├── displaymachine.asp # Display single machine (5 tabs)
├── addmachine.asp # Add new machine form (5 tabs)
├── editmachine.asp # Edit machine form (5 tabs)
├── savemachine_direct.asp # Save new machine handler
├── savemachineedit.asp # Save machine edits handler
└── docs/
├── MACHINE_MANAGEMENT_COMPLETE.md # Comprehensive overview
├── MACHINE_EDIT_FORM_IMPLEMENTATION.md # Edit form details
├── ADD_EDIT_MACHINE_UPDATES.md # Add form details
└── DISPLAY_PAGES_UPDATE_SUMMARY.md # Display page details
Database Tables
machines
Primary table for all equipment and PCs
machineid- Primary keymachinenumber- Equipment number (unique, required)modelnumberid- Foreign key to modelsbusinessunitid- Foreign key to businessunitspctypeid- NULL for equipment, NOT NULL for PCsalias- Friendly namemachinenotes- Notesmapleft,maptop- Location coordinates
communications
Network interface data (up to 3 per machine)
comid- Primary keymachineid- Foreign key to machinesaddress- IP addressmacaddress- MAC addressinterfacename- "Interface 1", "Interface 2", "Interface 3"isprimary- 1 for primary, 0 for secondary
machinerelationships
Relationships between machines
relationshipid- Primary keymachineid- Source machinerelated_machineid- Target machinerelationshiptypeid- Foreign key to relationshiptypes
Relationship Types:
- Controls (one-way): PC → Equipment
- Dualpath (bidirectional): Machine ↔ Machine
compliance
Compliance and security data
complianceid- Primary keymachineid- Foreign key to machinesis_third_party_managed- ENUM('Yes', 'No', 'NA')third_party_vendorid- Foreign key to vendorsot_asset_system- OT classificationot_asset_device_type- DoD classification
Common Queries
Get Machine with All Data
SELECT m.*, mo.modelnumber, v.vendor, bu.businessunit, mt.machinetype
FROM machines m
LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid
LEFT JOIN vendors v ON mo.vendorid = v.vendorid
LEFT JOIN businessunits bu ON m.businessunitid = bu.businessunitID
LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid
WHERE m.machineid = ?
Get Network Interfaces
SELECT * FROM communications
WHERE machineid = ? AND isactive = 1
ORDER BY isprimary DESC, interfacename ASC
Get Controlling PC
SELECT m.machineid, m.hostname, c.address
FROM machinerelationships mr
JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid
JOIN machines m ON mr.machineid = m.machineid
LEFT JOIN communications c ON m.machineid = c.machineid AND c.isprimary = 1
WHERE mr.related_machineid = ? AND rt.relationshiptype = 'Controls'
Get Dualpath Machines
SELECT m.machineid, m.machinenumber, mt.machinetype, mo.modelnumber
FROM machinerelationships mr
JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid
JOIN machines m ON mr.related_machineid = m.machineid
LEFT JOIN models mo ON m.modelnumberid = mo.modelnumberid
LEFT JOIN machinetypes mt ON mo.machinetypeid = mt.machinetypeid
WHERE mr.machineid = ? AND rt.relationshiptype = 'Dualpath'
Get Compliance Data
SELECT c.*, v.vendor AS third_party_vendor_name
FROM compliance c
LEFT JOIN vendors v ON c.third_party_vendorid = v.vendorid
WHERE c.machineid = ?
Form Field Reference
Basic Info Tab
machinenumber- Equipment number (required, unique, readonly on edit)modelid- Model dropdown (required)businessunitid- Business unit dropdown (required)alias- Friendly name (optional)machinenotes- Notes (optional)
Network Tab
ip1,mac1- Primary interface (Interface 1)ip2,mac2- Optional interface (Interface 2)ip3,mac3- Optional interface (Interface 3)
Relationships Tab
controllingpc- PC dropdown (WHERE pctypeid IS NOT NULL)dualpathid- Machine dropdown (WHERE pctypeid IS NULL)
Compliance Tab
thirdpartymanaged- Dropdown (N/A, Yes, No)thirdpartyvendorid- Vendor dropdownotassetsystem- Text input (100 chars)dodassettype- Text input (100 chars)
Location Tab
mapleft- X coordinate (from map picker)maptop- Y coordinate (from map picker)
Code Patterns
Parameterized Query Example
Dim strSQL, rsResult
strSQL = "SELECT * FROM machines WHERE machineid = ?"
Set rsResult = ExecuteParameterizedQuery(objConn, strSQL, Array(machineid))
If Not rsResult.EOF Then
' Process results
End If
rsResult.Close
Set rsResult = Nothing
HTML Encoding Pattern
Response.Write("<td>" & Server.HTMLEncode(rsData("fieldname") & "") & "</td>")
NULL Handling Pattern
' Force to string to prevent NULL errors
Dim displayValue
displayValue = rsData("fieldname") & "" ' Converts NULL to empty string
' Use IIf for database inserts
cmd.Parameters.Append cmd.CreateParameter("@param", 200, 1, 50, IIf(value <> "", value, Null))
Common Tasks
Adding a New Machine
- Navigate to
addmachine.asp - Fill Basic Info tab (machine number, model, business unit)
- Fill Network tab (at least one IP/MAC)
- Select relationships (optional)
- Fill compliance data (optional)
- Click map to set location (optional)
- Click "Add Equipment"
Editing a Machine
- Navigate to
displaymachine.asp?machineid=XXX - Click "Edit Machine" button
- Update any tab
- Click "Update Equipment"
Viewing Machine Relationships
- Navigate to
displaymachine.asp?machineid=XXX - Click "Relationships" tab
- See three sections:
- Controls (PC that controls this)
- Controlled By This PC (if it's a PC)
- Dualpath (redundant machines)
Viewing Network Interfaces
- Navigate to
displaymachine.asp?machineid=XXX - Click "Network" tab
- See all interfaces in table format
Troubleshooting
Machine redirects to homepage
Cause: NULL machinetypeid in model Fix: Use LEFT JOIN instead of INNER JOIN for machinetypes
Edit button doesn't work
Cause: Invalid machineid or file doesn't exist Fix: Check URL parameter, verify editmachine.asp exists
Data doesn't save
Cause: Validation error or database connection issue
Fix: Check error message, review logs in /home/camp/projects/windows/logs/
Map doesn't load
Cause: Missing Leaflet.js or map images Fix: Verify leaflet.js, sitemap2025-dark.png, sitemap2025-light.png exist
"New" button doesn't work
Cause: JavaScript event handler issue Fix: Check browser console for errors, verify jQuery loaded
Relationships not saving
Cause: Relationship types don't exist or invalid machine IDs Fix: Verify relationshiptypes table has 'Controls' and 'Dualpath'
Security Checklist
- All queries use parameterized commands
- All output uses Server.HTMLEncode()
- All numeric inputs validated with IsNumeric()
- All string inputs have length limits
- NULL values handled properly
- No direct variable interpolation in SQL
- Error messages don't expose sensitive data
- Database connections always closed
Testing Checklist
Display Page:
- View machine with full data
- View machine with no network interfaces
- View machine with no relationships
- Click "Edit Machine" button
- Click related machine links
Add Form:
- Add machine with all fields
- Add machine with only required fields
- Test IP/MAC validation
- Create new model
- Create new vendor
- Use map picker
Edit Form:
- Edit basic info
- Add/remove network interfaces
- Change controlling PC
- Change dualpath machine
- Update compliance data
- Move location on map
Quick Command Reference
View Logs
tail -f /home/camp/projects/windows/logs/*.log
Check Database
mysql -u root -p shopdb -e "SELECT COUNT(*) FROM machines WHERE pctypeid IS NULL"
mysql -u root -p shopdb -e "SELECT COUNT(*) FROM communications"
mysql -u root -p shopdb -e "SELECT COUNT(*) FROM machinerelationships"
Find Machine by Number
SELECT machineid FROM machines WHERE machinenumber = '4500'
List All Relationships
SELECT m1.machinenumber AS source, m2.machinenumber AS target, rt.relationshiptype
FROM machinerelationships mr
JOIN machines m1 ON mr.machineid = m1.machineid
JOIN machines m2 ON mr.related_machineid = m2.machineid
JOIN relationshiptypes rt ON mr.relationshiptypeid = rt.relationshiptypeid
WHERE mr.isactive = 1
Support Resources
- Full Documentation:
MACHINE_MANAGEMENT_COMPLETE.md - Edit Form Details:
MACHINE_EDIT_FORM_IMPLEMENTATION.md - Add Form Details:
ADD_EDIT_MACHINE_UPDATES.md - Display Page Details:
DISPLAY_PAGES_UPDATE_SUMMARY.md - Migration Scripts:
/home/camp/projects/windows/shopdb/sql/migration_phase2/ - Import Logs:
/tmp/inventory_import_final.log
Last Updated: 2025-11-07 Version: 1.0 Status: Production Ready