# User Rating **Repository Path**: LinAlpaca/user-rating ## Basic Information - **Project Name**: User Rating - **Description**: 尝试进行github上的用户排名 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-24 - **Last Updated**: 2024-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # User Rating #### 介绍 本项目是一个开发者评估应用,旨在基于 GitHub 开源项目数据评估开发者的技术能力。通过分析项目的重要程度和开发者的贡献度,提供一个排行总榜和一个根据用户领域进行划分的领域榜,上传未登录的项目主页地址增加新用户排名 #### 项目目标 - TalentRank:根据开发者在开源项目中的贡献度和项目的重要性进行评级。 - Nation 推测:在缺少国家信息的情况下,通过开发者的社交网络推测其国籍。 - 领域识别:提供按领域搜索匹配的开发者信息,并可按 TalentRank 排序。 #### 分工部分 客户端由王润翔完成 服务端由林煜涵完成 #### 软件架构 该服务器分为 网关模块 和 数据挖掘模块,主要功能是通过调用 GitHub API 来获取和分析开发者数据,并将其存储到 MySQL 中。数据挖掘过程使用多线程和任务队列管理器来同步和优先处理任务,缓存方面利用 Redis 来减轻数据库负载。网关模块基于 HTTP 协议提供多种数据查询和手动添加功能。 ##### 日志输出与参数解析 - 使用 spdlog 封装日志输出功能,提供日志的灵活管理。 - 使用 gflags 解析运行参数,支持定制化配置 ##### 数据挖掘模块 调用 GitHub API 获取数据,包括项目仓库、贡献者信息和用户数据。 多线程处理分工: - 任务仓库的获取与发布:获取仓库信息并发布任务。 - 仓库贡献者的获取:获取并处理仓库贡献者的详细信息。 - 未知国籍用户的推测:对无国籍信息的用户进行分析与推测 任务队列: - 封装了任务队列,使用单例模式确保线程安全。 - 支持优先任务插入和优先获取。 - 详情见 [https://gitee.com/LinAlpaca/user-rating/blob/master/server/common/task.hpp] [https://gitee.com/LinAlpaca/user-rating/blob/master/server/common/dig.hpp] 用户在一个仓库中的分数结合仓库的 star fork 数以及用户在其中的贡献数计算而来 ##### 网关模块 基于 HTTP 搭建服务器,提供四种请求接口: - 获取总榜:返回所有用户的得分排名。 - 获取领域榜:提供特定领域的排名信息。 - 手动添加项目仓库:支持用户手动提交 GitHub 仓库信息。 - 获取用户详细信息:查询用户详细信息。 网络接口字段定义在 proto 文件夹中,虽然最初计划使用 Protobuf,但现在采用 JSON 传输数据,仅保留 proto 文件作文档查看用。 - 详情见 [https://gitee.com/LinAlpaca/user-rating/tree/master/server/proto] [https://gitee.com/LinAlpaca/user-rating/tree/master/server/gate/src] ##### 数据库的设计 通过 ODB 定义了 Mysql 中的三个表 - ranks 用于存储用户信息与当前得分 - tmp_rank 存储需要推测国籍的用户信息 - user_repo 存储用户参与贡献的仓库信息 详情见 [https://gitee.com/LinAlpaca/user-rating/tree/master/server/odb] 并对表的操作进行了封装,实现插入、更新、查询等相关操作 详情见 [https://gitee.com/LinAlpaca/user-rating/blob/master/server/common/mysql_rank.hpp] [https://gitee.com/LinAlpaca/user-rating/blob/master/server/common/mysql_repo.hpp] ##### Redis的设计 在 redis 中进行用户国籍与仓库中统计过的用户的缓存 使用 redis++ 进行 redis 的访问,并对相关操作进行封装 详情见 [https://gitee.com/LinAlpaca/user-rating/blob/master/server/common/data_redis.hpp] ##### Config: - 根据 star 排名的仓库进行用户信息的统计,config.conf配置文件标识为启动时将访问的仓库 #### 安装教程 /server/depends/为程序运行需要的相关依赖 server: 在server/路径下 mkdir build && cd build cmake .. make install 可执行程序会被安装到 server/build/bin 路径下 #### 使用说明 conf/文件夹中有两个配置文件 config.conf 标识数据挖掘的起始位置 rank.conf 主要为各个组件的配置 -run_mode false为调试模式会打印所有日志信息 true为发布模式会向文件中进行日志输出 -file 日志文件的路径 -level 控制日志的输出等级 更多配置信息可以使用 rank_server --help 查看 启动程序前需要往数据库中导入 server/sql/ 中的表 mysql -u name -p < xxx.sql 启动程序 (在server/bin/目录下) ./rank_server -flagfile=../../conf/rank.conf 客户端的相关说明详情 [https://gitee.com/LinAlpaca/user-rating/blob/master/client/README.md]