lab-resource-manager
A resource reservation management system for laboratories.
Overview
- Resource Reservation Management: Manage schedules for resources such as GPU servers and rooms
- Change Notifications: Get notified when reservations are created, updated, or deleted
- Identity Linking: Map user identities across different systems for enhanced notifications
Default Implementations
| Component | Implementation |
|---|---|
| Resource Repository | Google Calendar |
| Notifications | Slack |
| User Interface | Slack Bot |
| Access Control | Google Calendar ACL |
Quick Start
- Users: See User Guide
- Administrators: See Admin Guide
Architecture
This project follows Clean Architecture (DDD + Hexagonal Architecture):
src/
├── domain/ # Domain layer (business logic)
│ ├── aggregates/ # Aggregates (ResourceUsage, IdentityLink)
│ ├── common/ # Shared Kernel (EmailAddress, etc.)
│ ├── ports/ # Ports (Repository, Notifier traits)
│ └── errors.rs # Domain errors
├── application/ # Application layer (use cases)
│ └── usecases/ # Notify, GrantAccess use cases
├── infrastructure/ # Infrastructure layer (implementations)
│ ├── repositories/ # Repository implementations
│ ├── notifier/ # Notification implementations
│ ├── resource_collection_access/ # Access control implementations
│ └── config/ # Configuration management
├── interface/ # Interface layer
│ └── slack/ # Slack bot interface
└── bin/
└── lab-resource-manager.rs # Entry point
Development
Prerequisites
- Rust 1.90+
Build & Test
Roadmap
- Resource-based notification routing
- Identity Linking
- Access management interface
- Reservation creation via Slack commands
- Natural language resource management (LLM agent)
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.