Skip to content

Commit

Permalink
1. 临时去重定期删除过期的值 2. eamil错别字改为email 3. 修复自定义配置对报警及代理不生效的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
Boris-code committed Jul 2, 2021
1 parent 5e2372b commit b14b853
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 29 deletions.
8 changes: 4 additions & 4 deletions docs/source_code/报警及监控.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ WECHAT_WARNING_ALL = False # 是否提示所有人, 默认为False

```
# 邮件报警
EAMIL_SENDER = "" # 发件人
EAMIL_PASSWORD = "" # 授权码
EMAIL_SENDER = "" # 发件人
EMAIL_PASSWORD = "" # 授权码
EMAIL_RECEIVER = "" # 收件人 支持列表,可指定多个
```

邮件报警目前支持163邮箱作为发送者,`EAMIL_SENDER`为邮箱账号,如`[email protected]`, `EAMIL_PASSWORD`为授权码,不是登录密码,获取授权码的流程如下:
邮件报警目前支持163邮箱作为发送者,`EMAIL_SENDER`为邮箱账号,如`[email protected]`, `EMAIL_PASSWORD`为授权码,不是登录密码,获取授权码的流程如下:

1. 设置 -> POP3/SMTP/IMAP

Expand All @@ -61,7 +61,7 @@ EMAIL_RECEIVER = "" # 收件人 支持列表,可指定多个

![-w444](http://markdown-media.oss-cn-beijing.aliyuncs.com/2021/03/27/16167719490656.jpg)

开启后,会弹出授权码,该授权码即为EAMIL_PASSWORD
开启后,会弹出授权码,该授权码即为EMAIL_PASSWORD

3. 设置反垃圾规则为高级

Expand Down
4 changes: 2 additions & 2 deletions docs/source_code/配置文件.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ REQUEST_FILTER_ENABLE = False # request 去重
DINGDING_WARNING_URL = "" # 钉钉机器人api
DINGDING_WARNING_PHONE = "" # 报警人 支持列表,可指定多个
# 邮件报警
EAMIL_SENDER = "" # 发件人
EAMIL_PASSWORD = "" # 授权码
EMAIL_SENDER = "" # 发件人
EMAIL_PASSWORD = "" # 授权码
EMAIL_RECEIVER = "" # 收件人 支持列表,可指定多个
# 时间间隔
WARNING_INTERVAL = 3600 # 相同报警的报警时间间隔,防止刷屏; 0表示不去重
Expand Down
5 changes: 5 additions & 0 deletions feapder/dedup/expirefilter.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def __init__(
self.name = name
self.expire_time = expire_time
self.expire_time_record_key = expire_time_record_key
self.del_expire_key_time = None

self.record_expire_time()

Expand All @@ -47,6 +48,9 @@ def add(self, keys, *args, **kwargs):
@param keys: 检查关键词在zset中是否存在,支持列表批量
@return: list / 单个值
"""
if self.current_timestamp - self.del_expire_key_time > self.expire_time:
self.del_expire_key()

is_added = self.redis_db.zadd(self.name, keys, self.current_timestamp)
return is_added

Expand All @@ -57,6 +61,7 @@ def del_expire_key(self):
self.redis_db.zremrangebyscore(
self.name, "-inf", self.current_timestamp - self.expire_time
)
self.del_expire_key_time = self.current_timestamp

def record_expire_time(self):
if self.expire_time_record_key:
Expand Down
7 changes: 5 additions & 2 deletions feapder/network/proxy_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,9 @@ def __init__(self, **kwargs):
:param logger: 日志处理器 默认 log.get_logger()
:param kwargs: 其他的参数
"""
kwargs.setdefault("size", -1)
kwargs.setdefault("proxy_source_url", setting.PROXY_EXTRACT_API)

super(ProxyPool, self).__init__(**kwargs)
# 队列最大长度
self.max_queue_size = kwargs.get("size", -1)
Expand Down Expand Up @@ -423,7 +426,7 @@ def __init__(self, **kwargs):
self.proxy_dict = {}
# 失效代理队列
self.invalid_proxy_dict = {}
#

self.kwargs = kwargs

# 重置代理池锁
Expand Down Expand Up @@ -712,4 +715,4 @@ def all(self) -> list:
if not setting.PROXY_ENABLE or not setting.PROXY_EXTRACT_API:
proxy_pool = None
else:
proxy_pool = ProxyPool(size=-1, proxy_source_url=setting.PROXY_EXTRACT_API)
proxy_pool = ProxyPool()
4 changes: 2 additions & 2 deletions feapder/setting.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@
DINGDING_WARNING_URL = "" # 钉钉机器人api
DINGDING_WARNING_PHONE = "" # 报警人 支持列表,可指定多个
# 邮件报警
EAMIL_SENDER = "" # 发件人
EAMIL_PASSWORD = "" # 授权码
EMAIL_SENDER = "" # 发件人
EMAIL_PASSWORD = "" # 授权码
EMAIL_RECEIVER = "" # 收件人 支持列表,可指定多个
EMAIL_SMTPSERVER = "smtp.163.com" # 邮件服务器 默认为163邮箱
# 企业微信报警
Expand Down
4 changes: 2 additions & 2 deletions feapder/templates/project_template/setting.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@
# DINGDING_WARNING_URL = "" # 钉钉机器人api
# DINGDING_WARNING_PHONE = "" # 报警人 支持列表,可指定多个
# # 邮件报警
# EAMIL_SENDER = "" # 发件人
# EAMIL_PASSWORD = "" # 授权码
# EMAIL_SENDER = "" # 发件人
# EMAIL_PASSWORD = "" # 授权码
# EMAIL_RECEIVER = "" # 收件人 支持列表,可指定多个
# EMAIL_SMTPSERVER = "smtp.163.com" # 邮件服务器 默认为163邮箱
# # 企业微信报警
Expand Down
49 changes: 32 additions & 17 deletions feapder/utils/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2273,12 +2273,13 @@ def is_in_rate_limit(rate_limit, *key):


def dingding_warning(
message,
message_prefix=None,
rate_limit=setting.WARNING_INTERVAL,
url=setting.DINGDING_WARNING_URL,
user_phone=setting.DINGDING_WARNING_PHONE,
message, message_prefix=None, rate_limit=None, url=None, user_phone=None
):
# 为了加载最新的配置
rate_limit = rate_limit if rate_limit is not None else setting.WARNING_INTERVAL
url = url or setting.DINGDING_WARNING_URL
user_phone = user_phone or setting.DINGDING_WARNING_PHONE

if not all([url, user_phone, message]):
return

Expand Down Expand Up @@ -2316,17 +2317,24 @@ def email_warning(
message,
title,
message_prefix=None,
eamil_sender=setting.EAMIL_SENDER,
eamil_password=setting.EAMIL_PASSWORD,
email_receiver=setting.EMAIL_RECEIVER,
email_smtpserver=setting.EMAIL_SMTPSERVER,
rate_limit=setting.WARNING_INTERVAL,
email_sender=None,
email_password=None,
email_receiver=None,
email_smtpserver=None,
rate_limit=None,
):
if not all([message, eamil_sender, eamil_password, email_receiver]):
# 为了加载最新的配置
email_sender = email_sender or setting.EMAIL_SENDER
email_password = email_password or setting.EMAIL_PASSWORD
email_receiver = email_receiver or setting.EMAIL_RECEIVER
email_smtpserver = email_smtpserver or setting.EMAIL_SMTPSERVER
rate_limit = rate_limit if rate_limit is not None else setting.WARNING_INTERVAL

if not all([message, email_sender, email_password, email_receiver]):
return

if is_in_rate_limit(
rate_limit, email_receiver, eamil_sender, message_prefix or message
rate_limit, email_receiver, email_sender, message_prefix or message
):
log.info("报警时间间隔过短,此次报警忽略。 内容 {}".format(message))
return
Expand All @@ -2335,7 +2343,7 @@ def email_warning(
email_receiver = [email_receiver]

with EmailSender(
username=eamil_sender, password=eamil_password, smtpserver=email_smtpserver
username=email_sender, password=email_password, smtpserver=email_smtpserver
) as email:
return email.send(receivers=email_receiver, title=title, content=message)

Expand Down Expand Up @@ -2372,12 +2380,19 @@ def linkedsee_warning(message, rate_limit=3600, message_prefix=None, token=None)
def wechat_warning(
message,
message_prefix=None,
rate_limit=setting.WARNING_INTERVAL,
url=setting.WECHAT_WARNING_URL,
user_phone=setting.WECHAT_WARNING_PHONE,
all_users=setting.WECHAT_WARNING_ALL,
rate_limit=None,
url=None,
user_phone=None,
all_users: bool = None,
):
"""企业微信报警"""

# 为了加载最新的配置
rate_limit = rate_limit if rate_limit is not None else setting.WARNING_INTERVAL
url = url or setting.WECHAT_WARNING_URL
user_phone = user_phone or setting.WECHAT_WARNING_PHONE
all_users = all_users if all_users is not None else setting.WECHAT_WARNING_ALL

if isinstance(user_phone, str):
user_phone = [user_phone] if user_phone else []

Expand Down

0 comments on commit b14b853

Please sign in to comment.