0%

用户状态监测

根据client的ping消息,监听用户状态

分时采集ping 消息

每隔5S,采集10S内的ping消息

1
2
3
4
5
6
7
8
9
time_now, ms_delta, listen_list = int(time.time()), 0, []
while ms_delta < 10:
value = MQ.message
if value:
listen_list.append(value)
ms_delta = int(time.time()) - time_now
func(listen_list)
time.sleep(5)

这里面有一个小技巧,采集10S内的ms,可以用时间差作为循环控制条件

差值思想,获取未ping的客户端(下线状态)

上述步骤获取当前10S内的ping消息,online_list

关键:通过redis获取上次前10S内的ping消息,last_online

  • 如果last_online为空,说明当前offline_list不存在。将当前的online_list存入到redis,并作为下次的last_online
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cache_key = ""
    if not value_list:
    redis_client.delete(cache_key)

    with redis_client.pipeline() as pipe:
    pipe.multi()
    pipe.delete(cache_key)
    pipe.sadd(cache_key, *value_list)
    pipe.expireat(cache_key, expired_at)
    pipe.execute()

  • 如果last_online不为空,则当前不在线状态为:offline_list = last_online - online_list

python禁掉kafka debug日志

django 中使用kafka,但kafka 的debug日志会无限输出到日志文件中,非常头痛。

1
2
3
INFO 2022-07-29 08:46:51,544 0cd0ec8c3b57480093f54a8907cb2a63 [base._handle_group_coordinator_response line:694] Discovered coordinator coordinator-0 for group g1
WARNING 2022-07-29 08:46:51,544 0cd0ec8c3b57480093f54a8907cb2a63 [base.coordinator_dead line:716] Marking the coordinator dead (node coordinator-0) for group g1: Node Disconnected.
WARNING 2022-07-29 08:46:51,544 2d9682ce3ecd4d0481e70f9acd8ebdf2 [base.coordinator_dead line:716] Marking the coordinator dead (node coordinator-0) for group g1: Node Disconnected.

根本原因在于,kafka的python包中 logger = logging.getLogger("kafka")
如果在django 的setting中没有定义 kafka 的logger,那会直接输出到 ROOT中。

解决方法也很简单,在setting的logging配置中配置下 kafka logger

1
2
3
4
5
6
7
8
"loggers": {
"kafka": {
"handlers": ["console"],
"propagate": False,
"level": "WARNING",
},
...
},

或者

1
logging.getLogger("kafka").setLevel(logging.WARNING)

日志level,看需求,一般是INFO,不像看到相关的kafka任何信息直接使用ERROR

shell script

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
logroot="/usr/servers/nginx/logs"
hisroot=$logroot/log-history
sudo mkdir -p $hisroot
day=$(date '+%Y%m%d')
aclogname="${day}-access.log"
erlogname="${day}-error.log"
cat $logroot/api-access.log > $hisroot/$aclogname
cat $logroot/api-error.log > $hisroot/$erlogname
sudo truncate -s 0 $logroot/api-access.log
sudo truncate -s 0 $logroot/api-error.log

Read more »

nginx web page 404

1
2
3
4
5
6
7
location / {
root /file_path;
index index.html index.htm;
try_files $uri $uri/ @rewrites;
}
location @rewrites {rewrite ^(.+)$ /index/index.html last;}

Read more »

前置环境

  • Azure
  • centos7.6
  • python3.6.5
  • tornado==5.0.2
  • Tornado-MySQL==0.5.1
  • tornado-redis==2.4.18
Read more »

注:该文档只适用centos7以下(不包括centos7),安装mysql5.6。文档中的mysql5.6相对于mysql5.7存在一些意想不到的问题。比如int类型的获取到undefined会被mysql处理成default值。

检测系统是否安装mysql

yum list installed | grep mysql

安装mysql安装包

1
2
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm
Read more »