当前位置: 首页 > news >正文

球迷类的网站如何做网络优化是做什么的

球迷类的网站如何做,网络优化是做什么的,b2c购物网站的建设论文,做网站买那种服务器1.说明 统计公司所有项目的提交情况,可指定分支和时间段,返回每个人的提交新增数、删除数和总数。 2.API 文档地址:http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例: [{"id": 1, //项目ID"http…
1.说明

统计公司所有项目的提交情况,可指定分支和时间段,返回每个人的提交新增数、删除数和总数。

2.API

文档地址:http://公司gitlab域名/help/api/README.md

在这里插入图片描述

  • 项目列表查询
    在这里插入图片描述
    返回示例:
[{"id": 1, //项目ID"http_url_to_repo": "http://git.xxx.com/a/saas-project-1.git","web_url": "http://git.xxx.com/a/saas-project-1","name": "saas-project-1", //项目名"name_with_namespace": "a / saas-project-1","path": "saas-project-1","path_with_namespace": "a/saas-project-1"}
]
  • 提交记录查询
    在这里插入图片描述
  • 单次提交统计
    在这里插入图片描述
3.PRIVATE-TOKEN

PRIVATE-TOKEN获取地址:http://公司gitlab域名/profile/account
查看Private token下面的值即可

在这里插入图片描述

4.代码
package com.visy.utils;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.tuple.Triple;import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;/*** @author visy.wang*/
public class GitStatsUtil {private static final String PRIVATE_TOKEN = "你自己的Private token";private static final String BASE_URL = "http://公司gitlab域名/api/v4";private static <T> T doGet(String url, Function<String,T> respHandler, Supplier<T> defaultResp){HttpRequest request = HttpUtil.createGet(BASE_URL + url);request.header("PRIVATE-TOKEN", PRIVATE_TOKEN);HttpResponse response = request.execute();if(response.getStatus() == 200){return respHandler.apply(response.body());}else{return defaultResp.get();}}private static List<Map<String,Object>> listProjects(){int pageNo = 1, pageSize = 100;List<Map<String,Object>> allList = new ArrayList<>();boolean hasNext = true;while (hasNext){System.out.println("listProjects: pageNo=" + pageNo);List<Map<String,Object>> list = listProjects(pageNo, pageSize);allList.addAll(list);pageNo ++;hasNext = list.size() >= pageSize;}return allList;}private static List<Map<String,Object>> listProjects(int pageNo, int pageSize){String url = "/projects?order_by=name&sort=asc&simple=true&archived=false&owned=false&page="+pageNo+"&per_page="+pageSize;return doGet(url, body -> {JSONArray array = JSONArray.parseArray(body);return array.stream().map(item -> {Map<String,Object> mp = new HashMap<>();mp.put("id", ((JSONObject)item).getLong("id"));mp.put("name", ((JSONObject)item).getString("name"));return mp;}).collect(Collectors.toList());}, Collections::emptyList);}private static List<String> listCommitIds(Object projectId, String since, String until, String refName){int pageNo = 1, pageSize = 100;List<String> allList = new ArrayList<>();boolean hasNext = true;while (hasNext){System.out.println("listCommitIds: pageNo=" + pageNo+", projectId="+projectId);List<String> list = listCommitIds(projectId, since, until, refName, pageNo, pageSize);allList.addAll(list);pageNo ++;hasNext = list.size() >= pageSize;}return allList;}private static List<String> listCommitIds(Object projectId, String since, String until, String refName, int pageNo, int pageSize){String url = "/projects/" + projectId + "/repository/commits?ref_name=" + refName+ "&page=" + pageNo + "&per_page=" + pageSize+ "&since=" + since + "T00:00:00+08:00&until=" + until+"T23:59:59+08:00";return doGet(url, body -> {JSONArray array = JSONArray.parseArray(body);return array.stream().map(item -> ((JSONObject)item).getString("id")).collect(Collectors.toList());}, Collections::emptyList);}private static Map<String,Object> getCommitStats(Object projectId, Object commitId){String url = "/projects/" + projectId + "/repository/commits/" + commitId;return doGet(url, body -> {JSONObject data = JSONObject.parseObject(body);Map<String,Object> mp = new HashMap<>();mp.put("authorName", data.getString("author_name"));mp.put("authorEmail", data.getString("author_email"));data = data.getJSONObject("stats");mp.put("add", data.getInteger("additions"));mp.put("delete", data.getInteger("deletions"));mp.put("total", data.getInteger("total"));return mp;}, Collections::emptyMap);}public static void main(String[] args) {//指定时间段和分支名String since = "2024-01-01", until = "2024-01-31", branch = "branch1";List<Map<String, Object>> projects = listProjects();List<Map<String,Object>> allUserCommits = new ArrayList<>();projects.forEach(project -> {Object projectId = project.get("id");List<String> commitIds = listCommitIds(projectId, since, until, branch);commitIds.forEach(commitId -> allUserCommits.add(getCommitStats(projectId, commitId)));});Map<String, Triple<Integer,Integer,Integer>> userCommitsMap = new HashMap<>();allUserCommits.forEach(item -> {if(item==null || item.isEmpty()){return;}String userName = item.get("authorName").toString();Triple<Integer,Integer,Integer> triple = userCommitsMap.getOrDefault(userName, Triple.of(0,0,0));Integer add = Integer.valueOf(item.get("add").toString());Integer delete = Integer.valueOf(item.get("delete").toString());Integer total = Integer.valueOf(item.get("total").toString());triple = Triple.of(triple.getLeft()+add, triple.getMiddle()+delete, triple.getRight()+total);userCommitsMap.put(userName, triple);});System.out.println("涉及项目("+projects.size()+"):");projects.forEach(p -> System.out.println(p.get("name")+" [id="+p.get("id")+"]"));System.out.println("----------------------------------------------------------");System.out.println("分支:"+branch+", 统计周期: " + since+" ~ " + until);System.out.println("----------------------------------------------------------");AtomicInteger add = new AtomicInteger(0), delete = new AtomicInteger(0), total = new AtomicInteger(0);userCommitsMap.forEach((userName, triple) -> {add.getAndAdd(triple.getLeft());delete.getAndAdd(triple.getMiddle());total.getAndAdd(triple.getRight());System.out.println(userName + ": 新增=" + triple.getLeft()+", 删除="+triple.getMiddle()+", 总数="+triple.getRight());});System.out.println("总计: 新增=" + add.get() + ", 删除=" + delete.get() + ", 总数=" + total.get());}
}
5.输出示例:
涉及项目(3):
saas-project-1 [id=1]
saas-project-2 [id=2]
saas-project-3 [id=3]
----------------------------------------------------------
分支:branch1, 统计周期: 2024-01-01 ~ 2024-01-31
----------------------------------------------------------
张三: 新增=1, 删除=2, 总数=3
李四: 新增=4, 删除=5, 总数=9
王五: 新增=6, 删除=7, 总数=13
总计: 新增=11, 删除=14, 总数=25
http://www.tj-hxxt.cn/news/99941.html

相关文章:

  • 网站建设登记表百度搜索关键词排名优化技术
  • 潍坊市网站建设搜索引擎公司排名
  • 模版网站做支付功能aso优化方案
  • 自己可以做电子商务网站江苏网站seo设计
  • 网游排行榜2021前十名免费seo营销优化软件下载
  • 网站建设案例 杭州远大东莞推广平台有哪些
  • 互联网开网站怎么做怎么设置自己的网站
  • 网站建设金思扬网络seo指的是什么
  • 个人网站可以做信息网站吗中国国家人事人才培训网证书查询
  • 丰台企业网站建设制作网站要找什么公司
  • 益阳网站建设公司发帖推广百度首页
  • 山东第二波疫情最新消息搜索引擎优化seo专员招聘
  • 2017网站建设网络营销的概念及内容
  • 沈阳网站seo外包北京搜索引擎推广服务
  • 网站建设微信运营公司西藏自治区seo 标题 关键词优化
  • 任丘 做网站网络营销企业案例
  • 淘宝上网站建设好便宜媒体发稿网
  • wordpress 产品视频上传seo顾问服务公司
  • 精品成品中韩网站源码免费企业怎么做好网站优化
  • 做农资的网站网络营销的发展现状如何
  • 手机可以做网站的服务器吗赛雷猴是什么意思
  • 动态网站 费用seo资讯网
  • 做pc网站如何实时预览全球搜是什么公司
  • 小学的门户网站建设网站优化设计的基础是网站基本要素及每个细节的优化
  • 建设网站申请seosem是什么职位
  • 小说wordpress主题seo整站优化公司持续监控
  • 做网页要花多少钱中山网站seo
  • 有什么做家纺的网站网站seo 工具
  • 中山市有做网站优化的吗发布软文广告
  • 关于政府网站的建设百度云盘