github.com/Mrs4s/go-cqhttp@v1.2.0/internal/selfdiagnosis/diagnoses.go (about)

     1  // Package selfdiagnosis 自我诊断相关
     2  package selfdiagnosis
     3  
     4  import (
     5  	"github.com/Mrs4s/MiraiGo/client"
     6  	log "github.com/sirupsen/logrus"
     7  )
     8  
     9  // NetworkDiagnosis 诊断网络状态并输出结果
    10  func NetworkDiagnosis(c *client.QQClient) {
    11  	log.Infof("开始诊断网络情况")
    12  	qualityInfo := c.ConnectionQualityTest()
    13  	log.Debugf("聊天服务器连接延迟: %vms", qualityInfo.ChatServerLatency)
    14  	log.Debugf("聊天服务器丢包率: %v%%", qualityInfo.ChatServerPacketLoss*10)
    15  	log.Debugf("长消息服务器连接延迟: %vms", qualityInfo.LongMessageServerLatency)
    16  	log.Debugf("长消息服务器响应延迟: %vms", qualityInfo.LongMessageServerResponseLatency)
    17  	log.Debugf("媒体服务器连接延迟: %vms", qualityInfo.SrvServerLatency)
    18  	log.Debugf("媒体服务器丢包率: %v%%", qualityInfo.SrvServerPacketLoss*10)
    19  
    20  	const (
    21  		chatServerErrorMessage        = "可能出现消息丢失/延迟或频繁掉线等情况, 请检查本地网络状态."
    22  		longMessageServerErrorMessage = "可能导致无法接收/发送长消息的情况, 请检查本地网络状态."
    23  		mediaServerErrorMessage       = "可能导致无法上传/下载媒体文件, 无法上传群共享, 无法发送消息等情况, 请检查本地网络状态."
    24  	)
    25  
    26  	if qualityInfo.ChatServerLatency > 1000 {
    27  		if qualityInfo.ChatServerLatency == 9999 {
    28  			log.Errorf("错误: 聊天服务器延迟测试失败, %v", chatServerErrorMessage)
    29  		} else {
    30  			log.Warnf("警告: 聊天服务器延迟为 %vms,大于 1000ms, %v", qualityInfo.ChatServerLatency, chatServerErrorMessage)
    31  		}
    32  	}
    33  
    34  	if qualityInfo.ChatServerPacketLoss > 0 {
    35  		log.Warnf("警告: 本地连接聊天服务器丢包率为 %v%%, %v", qualityInfo.ChatServerPacketLoss*10, chatServerErrorMessage)
    36  	}
    37  
    38  	if qualityInfo.LongMessageServerLatency > 1000 {
    39  		if qualityInfo.LongMessageServerLatency == 9999 {
    40  			log.Errorf("错误: 长消息服务器延迟测试失败, %v 如果您使用的腾讯云服务器, 请修改DNS到114.114.114.114", longMessageServerErrorMessage)
    41  		} else {
    42  			log.Warnf("警告: 长消息延迟为 %vms, 大于 1000ms, %v", qualityInfo.LongMessageServerLatency, longMessageServerErrorMessage)
    43  		}
    44  	}
    45  
    46  	if qualityInfo.LongMessageServerResponseLatency > 2000 {
    47  		if qualityInfo.LongMessageServerResponseLatency == 9999 {
    48  			log.Errorf("错误: 长消息服务器响应延迟测试失败, %v 如果您使用的腾讯云服务器, 请修改DNS到114.114.114.114", longMessageServerErrorMessage)
    49  		} else {
    50  			log.Warnf("警告: 长消息响应延迟为 %vms, 大于 1000ms, %v", qualityInfo.LongMessageServerResponseLatency, longMessageServerErrorMessage)
    51  		}
    52  	}
    53  
    54  	if qualityInfo.SrvServerLatency > 1000 {
    55  		if qualityInfo.SrvServerPacketLoss == 9999 {
    56  			log.Errorf("错误: 媒体服务器延迟测试失败, %v", mediaServerErrorMessage)
    57  		} else {
    58  			log.Warnf("警告: 媒体服务器延迟为 %vms,大于 1000ms, %v", qualityInfo.SrvServerLatency, mediaServerErrorMessage)
    59  		}
    60  	}
    61  
    62  	if qualityInfo.SrvServerPacketLoss > 0 {
    63  		log.Warnf("警告: 本地连接媒体服务器丢包率为 %v%%, %v", qualityInfo.SrvServerPacketLoss*10, mediaServerErrorMessage)
    64  	}
    65  
    66  	if qualityInfo.ChatServerLatency > 1000 || qualityInfo.ChatServerPacketLoss > 0 || qualityInfo.LongMessageServerLatency > 1000 || qualityInfo.SrvServerLatency > 1000 || qualityInfo.SrvServerPacketLoss > 0 {
    67  		log.Infof("网络诊断完成. 发现问题, 请检查日志.")
    68  	} else {
    69  		log.Infof("网络诊断完成. 未发现问题")
    70  	}
    71  }
    72  
    73  // DNSDiagnosis 诊断DNS状态并输出结果
    74  func DNSDiagnosis() {
    75  	// todo
    76  }
    77  
    78  // EnvironmentDiagnosis 诊断本地环境状态并输出结果
    79  func EnvironmentDiagnosis() {
    80  	// todo
    81  }