用于统计编码时长的Wakapi

news2024/10/6 12:21:37

在这里插入图片描述

本文应网友 suka 的要求折腾,但是否符合他得要求就不得而知了,因为老苏不是程序员,没有这方面的需求;

什么是 Wakatime ?

WakaTime 是一个可以统计你在不同语言、项目上写代码时长的工具。 它支持多种 IDE、编辑器。 它只在你敲键盘时统计,因此得到的是写代码的时间。 另外它会根据你打开的文件夹来判断你在哪个项目上。

什么是 Wakapi ?

Wakapi 是一个极简主义、自托管的 WakaTime 兼容后端,可帮助您跟踪使用不同编程语言等在不同项目上编码所花费的时间,用于编码统计。

在这里插入图片描述

安装

在群晖上以 Docker 方式安装。

建数据库

老苏用了群晖自带的 MariaDB 10 数据库。

phpMyAdmin 中创建名为 wakapi 的空数据库。

为便于说明,假设数据库密码为 123456

所以根据上面的设置,最后得到的数据库相关的参数如下:

  • 数据库主机:192.168.0.197,与群晖主机 IP 一致;
  • 数据库端口:3307
  • 数据库用户:wakapi
  • 数据库密码:123456
  • 数据库库名:wakapi,因为勾选了与用户同名;

镜像下载

官方没有在 docker hub 上发布镜像,而是发表到了 ghcr.io

老苏折腾时,latest 对应的版本为 2.8.1

SSH 客户端登录到群晖后,执行下面的命令

# 拉取镜像
docker pull ghcr.io/muety/wakapi:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/muety/wakapi:latest

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/muety/wakapi:latest ghcr.io/muety/wakapi:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/muety/wakapi:latest

下载完成后,可以在 映像 中找到

在这里插入图片描述

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 wakapi 
mkdir -p /volume1/docker/wakapi/data

# 进入 wakapi 目录
cd /volume1/docker/wakapi

# 运行容器
docker run -d \
   --restart unless-stopped \
   --name wakapi \
   -p 3047:3000 \
   -v $(pwd)/data:/data \
   -e WAKAPI_PASSWORD_SALT=6EbmsMZ2keIZR0F0Syg7Y4TMxflr5Dmd \
   -e WAKAPI_DB_TYPE=mysql \
   -e WAKAPI_DB_HOST=192.168.0.197 \
   -e WAKAPI_DB_PORT=3307 \
   -e WAKAPI_DB_NAME=wakapi \
   -e WAKAPI_DB_USER=wakapi \
   -e WAKAPI_DB_PASSWORD=123456 \
   -e ENVIRONMENT=prod \
   ghcr.io/muety/wakapi:latest
  • WAKAPI_PASSWORD_SALT:密码;
  • WAKAPI_DB_TYPE:数据库类型;
  • WAKAPI_DB_HOST:数据库主机;
  • WAKAPI_DB_PORT:数据库端口;
  • WAKAPI_DB_NAME:数据库库名;
  • WAKAPI_DB_USER:数据库用户名;
  • WAKAPI_DB_PASSWORD:数据库密码;
  • ENVIRONMENT:使用开发设置还是生产设置,设置为 prod 表示为生产设置;

更多的环境变量,请参考官方文档:https://github.com/muety/wakapi/blob/master/README.md#-configuration-options

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3.7'

services:
  wakapi:
    image: aceberg/rediary
    container_name: rediary
    restart: always
    ports:
      - 3047:3000
    volumes:
      - ./data:/data
    environment:
      # See README.md and config.default.yml for all config options
      WAKAPI_DB_TYPE: "mysql"
      WAKAPI_DB_NAME: "wakapi"
      WAKAPI_DB_USER: "wakapi"
      WAKAPI_DB_PASSWORD: "123456"
      WAKAPI_DB_HOST: "192.168.0.197"
      WAKAPI_DB_PORT: "5432"
      ENVIRONMENT: "prod"
      WAKAPI_PASSWORD_SALT: "6EbmsMZ2keIZR0F0Syg7Y4TMxflr5Dmd"

然后执行下面的命令

# 新建文件夹 wakapi 
mkdir -p /volume1/docker/wakapi/data

# 进入 wakapi 目录
cd /volume1/docker/wakapi

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3047 就能看到主界面

在这里插入图片描述

点右上角的 login,第一次需要注册账号

在这里插入图片描述

注册成功后

再次 login,登录成功后的主界面

在这里插入图片描述

可以看到设置说明,尤其是下面这段代码后面可能会用到

跟客户端数据采集的方式有关,老苏后来用的是通过 Wakatime 后台采集的,所以并没用上;

[settings]
api_url = http://192.168.0.197:3047/api  
api_key = 93a3577e-2330-4ae9-a86c-a93fbb741764

其中:

api_url :是指 API 服务的地址;
api_key :是指访问 Wakapi 服务的 API Key,之所以要强调是因为我们还会用到 Wakatime 服务的 API Key

注册 Wakatime

打开 https://wakatime.com/signup 注册账号

登录成功后,可以在 Setting --> Account --> API key 中找到 Wakatime API Key

在这里插入图片描述

如果你找不到,也可以在浏览器中直接访问 https://wakatime.com/api-key

安装插件

为自己的 IDE 安装插件,插件的下载地址:https://wakatime.com/plugins

虽然老苏不写代码,但是这些客户端中,也会用到 ChromeObsidianVS CodeWord

考虑到老苏用的最多的是 Obsidian,所以就试试 OB 的插件,点击 OB 的图标后,会有详解的教程

OB 插件市场中搜索 wakatime 并安装

还需要启用

输入 API key,这里是 Wakatime API Key

在这里插入图片描述

因为 OB 插件没有设置 URL 的地方,所以数据默认是传到 Wakatime 网站的

所有 WakaTime 文本编辑器插件,都会使用 WakaTime cli ,360 可能会阻止,添加信任就可以

当插件正常工作时,Wakatime 网页上会有插件的工作状态

能监测到插件的平台和版本

接下来我们还要通过 Wakapi 的整合功能,读取 Wakatime 的数据

导入数据

有两种方法拿到前端插件采集的数据:

1、第一种:可以通过在客户端侧安装代理来转发数据到 Wakapi,官方提供了安装设置的说明:https://github.com/muety/wakapi/wiki/Advanced-Setup:-Client-side-proxy

2、从 Wakatime 导入数据到 Wakapi

老苏测试了第二种方法;

回到 Wakapi 的后台,Settings --> Integrations

Connect,如果设置没问题的话,就可以 Import Data

导入数据不可撤销的

一开始是没有数据的

需要时间的积累,第二天WakaTime 的面板

Wakapi 的面板

感觉和 WakaTime 并不同步,但我也说不上来,或者只是统计口径不一样?

小结

如果仅限于显示 WakaTime 的数据,显然意义不大,Wakapi 具备和第三方应用,比如 PrometheusGrafana 的整合能力,这可能才是这个项目的意义所在吧

在这里插入图片描述

参考文档

muety/wakapi: 📊 A minimalist, self-hosted WakaTime-compatible backend for coding statistics
地址:https://github.com/muety/wakapi

Wakapi – Coding Statistics
地址:https://wakapi.dev/

WakaTime
地址:https://github.com/wakatime

WakaTime - Dashboards for developers
地址:https://wakatime.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商汤科技半年报出炉:生成式AI商业化成果喜人,驱动四大业务飞跃

撰稿|行星 来源|贝多财经 8月28日,商汤科技(HK:0020)发布了2023年上半年业绩报告。从财务数据来看,商汤科技在2023年上半年业绩表现稳健,大模型和生成式AI推动各项业务板块取得长足进步。 一、生成式AI表现亮眼&…

Koa + Prisma 快速入门

10分钟掌握 Koa Prisma 实现数据库 CRUD 前言 Prisma 是号称下一代的 ORM 工具,同样是基于 TypeScript 实现,但是带来了很强的类型安全。 本文使用 Koa.js 搭建一个简单的 Web 服务,配合 MySQL 数据库,来演示如何通过 Prisma …

【100天精通python】Day47:python网络编程_Web编程

目录 1 网络编程与web编程 1.1 网络编程 1.2 web编程 2 Web开发概述 3 Web开发基础 3.1 HTTP协议 3.2 Web服务器 3.3 前端基础 3.4 静态服务器 3.5 前后端交互的基本原理 4 WSGI接口 4.1 CGI 简介 4.2 WSGI 简介 4.3 定义 WSGI 接口 4.4 运行 WSGI 服务 4.5…

面霸的自我修养-synchronized

今天是《面霸的自我修养》的第3弹,内容是Java并发编程中至关重要的关键字synchronized,作为面试中的“必考题”,这部分是你必须要充分准备的内容,接下来我们就一起一探究竟吧。 数据来源: 大部分来自于各机构&#x…

SpringWeb(SpringMVC)

目录 SpringWeb介绍 搭建 SpringWeb SpringWeb介绍 Spring Web是一个基于 Servlet API 构建的原始 web 框架,用于构建基于MVC模式的Web应用程序。在 web 层框架历经 Strust1,WebWork,Strust2 等诸多产品的历代更选 之后,目前业界普…

研发规范第九讲:通用类命名规范(重点)

研发规范第九讲:通用类命名规范(重点) 无规范不成方圆。我自己非常注重搭建项目结构的起步过程,应用命名规范、模块的划分、目录(包)的命名,我觉得非常重要,如果做的足够好&#xff…

聊聊大厂都怎么防止重复下单?

一、问题背景 最简单的:DB 事务。如创建订单时,同时往订单表、订单商品表插数据,这些 Insert 须在同一事务执行。 Order 服务调用 Pay 服务,刚好网络超时,然后 Order 服务开始重试机制,于是 Pay 服务对同一…

java八股文面试[多线程]——自旋锁

优点: 1. 自旋锁尽可能的减少线程的阻塞,这对于锁的竞争不激烈,且占用锁时间非常短的代码块来说性能能大幅度的提升,因为自旋的消耗会小于线程阻塞挂起再唤醒的操作的消耗 ,这些操作会导致线程发生两次上下文切换&…

【Python自学笔记】Python好用的模块收集(持续更新...)

文章目录 日志模块钉钉机器人命令助手持续更新中,如果您有其他实用好用的模块欢迎留言...日志模块 写代码离不开日志,自定义一个理想的日志对于小白来说可能是一件很反锁的事情,就像我刚学习Python的时候自己写的一个自定义日志,为了解决这个痛点,今天就和大家分享一个可以…

Linux开发板下检查及配置串口(波特率/数据发送接收等)的操作

在linux开发板上如何设置和编辑串口波特率、开启指定的uart口? 下面演示常用的命令操作 1)编辑开启指定串口的配置文件 ls -l /boot/uEnv/ sudo vim /boot/uEnv/xxx.txt 2)检查串口是否开启成功 ls /dev/tty* 3)查看串口波特率…

每天 26,315 美元罚款?交通安全局要求特斯拉提供 Autopilot数据

根据美国国家公路交通安全管理局(NHTSA)最近的特别命令,特斯拉公司被要求提供关于其自动驾驶功能Autopilot的相关信息。这一命令是继NHTSA于2021年8月启动初步评估后,在2022年6月升级为正式调查的一部分,NHTSA近期对特…

电子电路学习笔记之NCP304LSQ37T1G ——超低电流电压检测器

超低电流电压检测器是一种专门用于检测极小电流值的设备。它们常用于电子元件或电路中,用于监测电流的存在和程度。这些检测器通常具有高灵敏度和高精度,能够测量微安级别或更小的电流。 超低电流电压检测器的应用领域广泛,例如电池管理系统…

宏昌转债上市价格预测

宏昌转债 基本信息 转债名称:宏昌转债,评级:A,发行规模:3.8亿元。 正股名称:宏昌科技,今日收盘价:30.5元,转股价格:29.62元。 当前转股价值 转债面值 / 转股…

Python绘图系统11:绘制极坐标图像

文章目录 旧代码整改投影下拉选框绘图逻辑源代码 Python绘图系统: 📈从0开始实现一个三维绘图系统自定义控件:坐标设置控件📉坐标列表控件📉支持多组数据的绘图系统📉极坐标绘图图表类型和风格&#xff1a…

C#,《小白学程序》第九课:堆栈(Stack),先进后出

1 文本格式 /// <summary> /// 《小白学程序》第九课&#xff1a;堆栈&#xff08;Stack&#xff09; /// 堆栈与队列是相似的数据形态&#xff1b;特点是&#xff1a;先进后出&#xff1b; /// 比如&#xff1a;狭窄的电梯&#xff0c;先进去的人只能最后出来&#xff1…

【教程】DGL中的子图分区函数partition_graph讲解

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 函数形式 函数作用 函数内容 函数入参 函数返参 使用示例 实际上官方的函数解释中就已经非常详细了。 函数形式 def partition_graph(g, graph_name, num_parts, out_path, num_hops1, part…

聚观早报|OpenAI宣布推出企业版ChatGPT;苹果公司开设8家新店

【聚观365】8月30日消息 OpenAI宣布推出企业版ChatGPT 比亚迪上半年净利润109.5亿元 歌尔股份上半年净利润4.22亿元 一起教育科技Q2营收6925万元 苹果公司今年开设8家新店 OpenAI宣布推出企业版ChatGPT 据外媒报道&#xff0c;当地时间周一&#xff0c;美国人工智能研究…

用XSIBackup为VMware ESXi打造完美备份方案

文章目录 VMware ESXi 备份方案引言XSIBackup安装步骤1. XSIBackup软件安装2. SSH连接3. 定位到xsibackup目录4. 修改文件权限5. 安装cron查看crontab列表6. 配置备份任务结论VMware ESXi 备份方案 引言 数据就像是我们的生命线,一旦丢失,可能会带来无法挽回的损失。对于那…

2024王道408数据结构P144 T16

2024王道408数据结构P144 T16 思考过程 首先看题目&#xff0c;要求我们把二叉树的叶子结点求出来并且用链表的方式存储&#xff0c;链接时用叶结点的右指针来存放单链表指针。我们很清楚可以看出来能用中序遍历递归的方式实现&#xff0c;因为第一个叶子结点在整棵树的最左下…

2024年java面试--集合篇

文章目录 前言ListSetMapCollectionListSetMapJDK1.7 HashMap&#xff1a;JDK1.8 HashMap&#xff1a; 一、ArrayList和LinkedList的区别二、HashSet的实现原理&#xff1f;三、List接口和Set接口的区别四、hashmap底层实现五、HashTable与HashMap的区别六、线程不安全体现七、…