LifeGraf 是一个个人数据聚合平台,旨在从多个来源(如Bilibili、Steam、ActivityWatch、GPS位置等)收集和存储活动数据,并通过Grafana进行可视化展示。
-
多数据源集成:支持从多种平台和服务收集数据
- Bilibili 观看记录
- Steam 游戏活动
- ActivityWatch 桌面活动追踪
- GPS 位置数据
- LeetCode 提交记录
-
自动化同步:定时同步任务自动获取最新数据
-
时间序列数据库:使用 PostgreSQL + TimescaleDB 存储时序数据
-
Grafana 可视化:提供丰富的数据可视化仪表板
-
可扩展架构:模块化设计便于添加新的数据源
LifeGraf 预配置了多个Grafana仪表板:
- BiliBili观看记录:展示您的B站观看历史和趋势
- GPS信息:显示您的地理位置轨迹,通过GPSLogger上报
- LeetCode时序图:跟踪您的刷题进度
- Steam好友状态:监控Steam好友的游戏活动
- 电脑使用监控:记录您的电脑使用情况
- 后端框架: Spring Boot 3.5.8
- 编程语言: Java 21
- 数据库: PostgreSQL with TimescaleDB
- ORM: MyBatis-Plus
- API文档: Knife4j (OpenAPI 3)
- 数据库迁移: Flyway
- 前端模板: Freemarker
- 依赖注入: Lombok & MapStruct
- 可视化: Grafana
lifegraf-parent/ # Maven父项目
├── lifegraf-common/ # 公共模块(共享配置、工具)
├── lifegraf-collector/ # 数据收集模块(Spring Modulith)
│ ├── lifegraf-bilibili/ # Bilibili视频平台
│ ├── lifegraf-steam/ # Steam游戏平台
│ ├── lifegraf-activitywatch/ # ActivityWatch桌面追踪
│ ├── lifegraf-gps/ # GPS位置追踪
│ └── lifegraf-leetcode/ # LeetCode提交记录
└── lifegraf-boot/ # 主应用启动器
└── src/main/resources/
├── db/migration/ # Flyway迁移脚本
├── mapper/ # MyBatis XML映射器
└── templates/ # Freemarker模板
- Java 21
- Maven 3.6+
- Docker & Docker Compose
- PostgreSQL (或使用提供的Docker Compose配置)
-
克隆项目:
git clone <repository-url> cd LifeGraf
-
启动服务(包含PostgreSQL和Grafana):
docker-compose up -d
-
构建并运行应用:
./mvnw clean package -DskipTests ./mvnw spring-boot:run -pl lifegraf-boot
-
访问应用:
- 应用程序:http://localhost:8080
- API文档:http://localhost:8080/doc.html
- Grafana:http://localhost:3000
- 构建并启动所有服务:
docker-compose up -d --build
创建 .env 文件来自定义配置:
# GRAFANA管理员密码
GRAFANA_PASSWORD=your_secure_password
# 模块启用/禁用
STEAM_ENABLED=true
BILIBILI_ENABLED=true
GPS_ENABLED=true
ACTIVITY_WATCH_ENABLED=true
LEETCODE_ENABLED=true
# Steam 配置
STEAM_API_KEY=your_steam_api_key
STEAM_MY_ID=your_steam_id
# LeetCode 配置
LEETCODE_USER_SLUG=your_username每个模块都有自己的配置前缀:
app:
steam:
base-url: ${STEAM_BASE_URL:steamapi.kiroe.cn}
api-key: ${STEAM_API_KEY:...}
my-steam-id: ${MY_STEAM_ID:...}
cron: ${STEAM_CRON:0 0/5 * * * ?} # 每5分钟执行一次
activity-watch:
base-url: ${ACTIVITY_WATCH_BASE_URL:...}
cron: ${ACTIVITY_WATCH_CRON:0 0/10 * * * ?} # 每10分钟执行一次
bilibili:
cron: ${BILIBILI_CRON:0 0/10 * * * ?} # 每10分钟执行一次
leetcode:
base-url: ${LEETCODE_BASE_URL:...}
user-slug: ${LEETCODE_USER_SLUG:...}Bilibili模块通过二维码扫描登录机制工作,用户的登录凭据(Cookie)会被安全地存储在数据库中,以便定期同步观看历史和其他数据。
如果需要使用Bilibili数据收集功能,您需要先进行Bilibili账户登录:
- 访问 http://localhost:8080/bilibili/login
- 使用手机Bilibili应用扫描显示的二维码
- 在手机上确认登录
- 登录成功后,Cookie信息将被安全地缓存到数据库中供后续使用
要添加新的数据源,请遵循以下模式:
- 在
lifegraf-collector下创建新模块 - 创建配置属性类(
*Properties) - 实现数据收集逻辑
- 创建数据库实体和映射器
- 使用 MapStruct 进行对象转换
- 创建定时任务同步数据
每个收集器模块遵循相同的结构:
cn.kiroe.lifegraf.<module>/
├── config/ # 配置属性类,使用 @ConfigurationPropertiesScan
├── controller/ # REST端点和视图控制器
├── service/ # 业务逻辑(接口+实现)
├── mapper/ # MyBatis-Plus映射器(继承 BaseMapper)
├── model/ # 数据库实体
├── converter/ # MapStruct DTO到实体映射器
├── remote/ # 外部API客户端
│ ├── *ClientConfig # WebClient配置
│ ├── *Client/*ApiClient # HTTP服务接口,使用 @HttpExchange
│ └── dto/ # API响应DTO
├── scheduler/ # @Scheduled 定时任务用于数据同步
└── enums/ # 枚举
欢迎贡献代码!请遵循以下步骤:
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
该项目采用 MIT 许可证 - 详见 LICENSE 文件。
如果您遇到任何问题或有建议,请提交 Issue 或 Pull Request。




