ohUrlShortener 1.5 版本升级指南

ohUrlShortener 短链接系统 1.6 版本做了较大的结构性调整,关系到管理端统计数据项及统计策略。 代码层面主要的变化可查阅:

  1. https://github.com/barats/ohUrlShortener/commits/v1.6
  2. https://gitee.com/barat/ohurlshortener/commits/v1.6

升级到1.6版本的过程中:为了兼容已存在的旧数据,需要手动对数据库进行一定的结构性改造,其具体过程如下:

升级数据库结构

ohUrlShortener 1.6 版本主要是对老版本的统计功能做了一定的升级,因此需对数据结构进行一定的调整。以下方法假定你使用的是 Docker 版本的 PostgreSQL 数据库,操作如下:

登录至 PostgreSQL 容器环境中

1sudo docker exec -it ohurlshortener_pg psql -U postgres

连接至 oh_url_shortener 数据库

1\c oh_url_shortener

执行以下数据库脚本

  1
  2-- Create table for top25 urls
  3CREATE TABLE public.stats_top25 (
  4	id serial4 NOT NULL,
  5	short_url varchar(200) NOT NULL,
  6	today_count int8 NOT NULL DEFAULT 0,
  7	d_today_count int8 NOT NULL DEFAULT 0,
  8	stats_time timestamp with time zone NOT NULL DEFAULT NOW(), 
  9	CONSTRAINT stats_tv_pk PRIMARY KEY (id)
 10);
 11
 12-- Stored procedure for top25 urls 
 13CREATE FUNCTION p_stats_top25() RETURNS void AS $$
 14BEGIN
 15	RAISE NOTICE 'Procedure p_stats_top25() called';
 16	
 17	-- delete all records 
 18	DELETE FROM public.stats_top25 WHERE 1=1;
 19
 20	-- insert fresh-new records
 21	INSERT INTO public.stats_top25(short_url,today_count,d_today_count,stats_time)  
 22		SELECT l.short_url AS short_url, COUNT(l.ip) AS today_count ,COUNT(DISTINCT(l.ip)) AS d_today_count, NOW() AS stats_time
 23		FROM public.access_logs l WHERE date(l.access_time) = date(NOW()) GROUP BY l.short_url ORDER BY today_count DESC LIMIT 25;
 24END; 
 25$$ LANGUAGE plpgsql;
 26
 27-- Create table for sum view 
 28CREATE TABLE public.stats_sum (
 29	stats_key varchar(200) NOT NULL,
 30	stats_value int8 NOT NULL DEFAULT 0,
 31	CONSTRAINT stats_sum_key PRIMARY KEY (stats_key)
 32);
 33
 34-- Insert pre-defined stats 
 35INSERT INTO public.stats_sum (stats_key,stats_value) VALUES  
 36	('today_count',0), ('d_today_count',0),
 37	('yesterday_count',0), ('d_yesterday_count',0),
 38	('last_7_days_count',0), ('d_last_7_days_count',0),
 39	('monthly_count',0), ('d_monthly_count',0);
 40
 41-- Stored procedure for stats sum view 
 42CREATE FUNCTION p_stats_sum() RETURNS void AS $$ 
 43DECLARE 
 44	today_count int8;
 45	d_today_count int8;
 46	yesterday_count int8;
 47	d_yesterday_count int8;
 48	last_7_days_count int8;
 49	d_last_7_days_count int8;
 50	monthly_count int8;
 51	d_monthly_count int8;
 52BEGIN
 53	RAISE NOTICE 'Procedure p_stats_sum() called';
 54	
 55	SELECT COUNT(l.ip),COUNT(DISTINCT(l.ip)) INTO today_count,d_today_count 
 56	FROM public.access_logs l WHERE date(l.access_time) = date(NOW());
 57
 58	SELECT COUNT(l.ip),COUNT(DISTINCT(l.ip)) INTO yesterday_count,d_yesterday_count 
 59	FROM public.access_logs l WHERE date(l.access_time) = (NOW() - INTERVAL '1 day')::date;
 60
 61	SELECT COUNT(l.ip),COUNT(DISTINCT(l.ip)) INTO last_7_days_count,d_last_7_days_count 
 62	FROM public.access_logs l WHERE date(l.access_time) >= (NOW() - INTERVAL '7 day')::date;
 63
 64	SELECT COUNT(l.ip),COUNT(DISTINCT(l.ip)) INTO monthly_count,d_monthly_count 
 65	FROM public.access_logs l WHERE DATE_PART('month', l.access_time) = DATE_PART('month',NOW());
 66
 67	UPDATE public.stats_sum SET stats_value = 
 68	CASE
 69		WHEN stats_key = 'today_count' THEN today_count
 70		WHEN stats_key = 'd_today_count' THEN d_today_count
 71		WHEN stats_key = 'yesterday_count' THEN yesterday_count
 72		WHEN stats_key = 'd_yesterday_count' THEN d_yesterday_count
 73		WHEN stats_key = 'last_7_days_count' THEN last_7_days_count
 74		WHEN stats_key = 'd_last_7_days_count' THEN d_last_7_days_count
 75		WHEN stats_key = 'monthly_count' THEN monthly_count
 76		WHEN stats_key = 'd_monthly_count' THEN d_monthly_count
 77		ELSE 0
 78	END;	
 79END;
 80$$ LANGUAGE plpgsql;
 81
 82-- Create table for ip url sum 
 83CREATE TABLE public.stats_ip_sum (
 84	short_url varchar(200) NOT NULL,
 85	today_count int8 NOT NULL DEFAULT 0,
 86	d_today_count int8 NOT NULL DEFAULT 0,
 87	yesterday_count int8 NOT NULL DEFAULT 0,
 88	d_yesterday_count int8 NOT NULL DEFAULT 0,
 89	last_7_days_count int8 NOT NULL DEFAULT 0,
 90	d_last_7_days_count int8 NOT NULL DEFAULT 0,
 91	monthly_count int8 NOT NULL DEFAULT 0,
 92	d_monthly_count int8 NOT NULL DEFAULT 0,
 93	total_count int8 NOT NULL DEFAULT 0,
 94	d_total_count int8 NOT NULL DEFAULT 0,
 95	CONSTRAINT stats_ip_sum_pk PRIMARY KEY (short_url)	
 96);
 97
 98-- Stored procedure for ip url sum 
 99CREATE FUNCTION p_stats_ip_sum() RETURNS void AS $$ 
100BEGIN 
101	
102	RAISE NOTICE 'Procedure p_stats_ip_sum() called';
103	
104	-- Delete all records
105	DELETE FROM public.stats_ip_sum WHERE 1=1;
106
107	-- Calculate new stats data 
108	INSERT INTO public.stats_ip_sum(short_url,today_count,d_today_count,yesterday_count,d_yesterday_count,last_7_days_count,d_last_7_days_count,
109		monthly_count,d_monthly_count,total_count,d_total_count)
110		SELECT
111			u.short_url,				
112			(SELECT count(ip) FROM public.access_logs WHERE date(access_time) = date(NOW()) AND short_url = u.short_url),
113			(SELECT count(DISTINCT(ip)) FROM public.access_logs WHERE date(access_time) = date(NOW()) AND short_url = u.short_url),
114			
115			(SELECT count(ip) FROM public.access_logs WHERE date(access_time) = (NOW() - INTERVAL '1 day')::date AND short_url = u.short_url),
116			(SELECT count(DISTINCT(ip)) FROM public.access_logs WHERE date(access_time) = (NOW() - INTERVAL '1 day')::date AND short_url = u.short_url),
117			
118			(SELECT count(ip) FROM public.access_logs WHERE date(access_time) >= (NOW() - INTERVAL '7 day')::date AND short_url = u.short_url),	
119			(SELECT count(DISTINCT(ip)) FROM public.access_logs WHERE date(access_time) >= (NOW() - INTERVAL '7 day')::date AND short_url = u.short_url),
120			
121			(SELECT count(ip) FROM public.access_logs WHERE DATE_PART('month',access_time) = DATE_PART('month',NOW()) AND short_url = u.short_url),
122			(SELECT count(DISTINCT(ip)) FROM public.access_logs WHERE DATE_PART('month',access_time) = DATE_PART('month',NOW()) AND short_url = u.short_url),
123			
124			(SELECT count(ip) FROM public.access_logs WHERE short_url = u.short_url),
125			(SELECT count(DISTINCT(ip)) FROM public.access_logs WHERE short_url = u.short_url)	
126		FROM public.short_urls u 
127			LEFT JOIN public.access_logs l ON u.short_url = l.short_url
128		GROUP BY u.short_url;
129END;
130$$ LANGUAGE plpgsql;

测试数据库对象是否正确

执行以下 SQL 函数确认期是否能够正常执行

1select * from p_stats_top25();
2select * from p_stats_ip_sum();
3select * from p_stats_sum();

退出 PostgreSQL 及 Docker 容器环境

1\q

重新启动 Docker 容器

停止当前运行的各容器

进入到 ohurlshortener\docker 目录中并执行

1./stop_destory.sh

修改 vars.env

进入到 ohurlshortener\docker 目录中修改 vars.env 文件,将其中的 OH_ADMIN_VERSIONOH_PORTAL_VERSION 改到最新版

1OH_PORTAL_VERSION=latest
2OH_ADMIN_VERSION=latest

重启启动各容器

进入到 ohurlshortener\docker 目录中并执行

1./one_step_start.sh

功能介绍

ohUrlShortener 适合中小型社区网站使用的企业级短链接服务系统,支持短链接生产、查询及302转向,并自带点击量统计、独立IP数统计、访问日志查询:

  1. 支持 Docker One Step Start 部署启动
  2. 支持短链接生产、查询、存储、302转向
  3. 支持访问日志查询、访问量统计、独立IP数统计
  4. 支持 HTTP API 方式新建短链接、禁用/启用短链接、查看短链接统计信息、新建管理员、修改管理员密码
  5. 支持访问日志导出,方便线下分析

ohUrlShortener 短链接系统

ohUrlShortener 短链接系统

下载使用

  1. 官网 https://www.ohurls.cn
  2. Github https://github.com/barats/ohUrlShortener
  3. Gitee https://gitee.com/barat/ohurlshortener
  4. Gitlink https://www.gitlink.org.cn/baladiwei/ohurlshortener
版权声明:本站所有内容,未经书面授权禁止一切形式的转载、摘录及摘抄,违者依法追究其相关责任。

相关文章