l7.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package l7
  2. import (
  3. "strconv"
  4. "time"
  5. "inet.af/netaddr"
  6. )
  7. type Protocol uint8
  8. const (
  9. ProtocolTrace Protocol = 200
  10. ProtocolHTTP Protocol = 1
  11. ProtocolPostgres Protocol = 2
  12. ProtocolRedis Protocol = 3
  13. ProtocolMemcached Protocol = 4
  14. ProtocolMysql Protocol = 5
  15. ProtocolMongo Protocol = 6
  16. ProtocolKafka Protocol = 7
  17. ProtocolCassandra Protocol = 8
  18. ProtocolRabbitmq Protocol = 9
  19. ProtocolNats Protocol = 10
  20. ProtocolHTTP2 Protocol = 11
  21. ProtocolDubbo2 Protocol = 12
  22. ProtocolDNS Protocol = 13
  23. ProtocolDM Protocol = 14
  24. ProtocolMariaDB Protocol = 15
  25. ProtocolGrpc Protocol = 16
  26. ProtocolES Protocol = 17
  27. ProtocolTiDB Protocol = 18
  28. )
  29. func (p Protocol) Int() int {
  30. return int(p)
  31. }
  32. func (p Protocol) String() string {
  33. switch p {
  34. case ProtocolTrace:
  35. return "TRACE"
  36. case ProtocolHTTP:
  37. return "HTTP"
  38. case ProtocolPostgres:
  39. return "Postgres"
  40. case ProtocolRedis:
  41. return "Redis"
  42. case ProtocolMemcached:
  43. return "Memcached"
  44. case ProtocolMysql:
  45. return "Mysql"
  46. case ProtocolMongo:
  47. return "Mongo"
  48. case ProtocolKafka:
  49. return "Kafka"
  50. case ProtocolCassandra:
  51. return "Cassandra"
  52. case ProtocolRabbitmq:
  53. return "Rabbitmq"
  54. case ProtocolNats:
  55. return "NATS"
  56. case ProtocolHTTP2:
  57. return "HTTP2"
  58. case ProtocolDubbo2:
  59. return "Dubbo2"
  60. case ProtocolDNS:
  61. return "DNS"
  62. case ProtocolDM:
  63. return "DM"
  64. case ProtocolMariaDB:
  65. return "Mariadb"
  66. case ProtocolTiDB:
  67. return "TiDB"
  68. case ProtocolGrpc:
  69. return "GRPC"
  70. case ProtocolES:
  71. return "Elasticsearch"
  72. }
  73. return "UNKNOWN:" + strconv.Itoa(int(p))
  74. }
  75. func (p Protocol) ServiceNameString() string {
  76. switch p {
  77. case ProtocolTrace:
  78. return "TRACE"
  79. case ProtocolHTTP:
  80. return "HTTP"
  81. case ProtocolPostgres:
  82. return "POSTGRESQL"
  83. case ProtocolRedis:
  84. return "REDIS"
  85. case ProtocolMemcached:
  86. return "Memcached"
  87. case ProtocolMysql:
  88. return "MYSQL"
  89. case ProtocolMongo:
  90. return "Mongo"
  91. case ProtocolKafka:
  92. return "KAFKA"
  93. case ProtocolCassandra:
  94. return "CASSANDRA"
  95. case ProtocolRabbitmq:
  96. return "Rabbitmq"
  97. case ProtocolNats:
  98. return "NATS"
  99. case ProtocolHTTP2:
  100. return "HTTP2"
  101. case ProtocolDubbo2:
  102. return "Dubbo2"
  103. case ProtocolDNS:
  104. return "DNS"
  105. case ProtocolDM:
  106. return "DM"
  107. case ProtocolMariaDB:
  108. return "MARIA"
  109. case ProtocolTiDB:
  110. return "TIDB"
  111. case ProtocolGrpc:
  112. return "GRPC"
  113. case ProtocolES:
  114. return "ELASTICSEARCH"
  115. }
  116. return "UNKNOWN:" + strconv.Itoa(int(p))
  117. }
  118. type Method uint8
  119. const (
  120. MethodUnknown Method = 0
  121. MethodProduce Method = 1
  122. MethodConsume Method = 2
  123. MethodStatementPrepare Method = 3
  124. MethodStatementClose Method = 4
  125. MethodHttp2ClientFrames Method = 5
  126. MethodHttp2ServerFrames Method = 6
  127. )
  128. func (m Method) String() string {
  129. switch m {
  130. case MethodUnknown:
  131. return "unknown"
  132. case MethodProduce:
  133. return "produce"
  134. case MethodConsume:
  135. return "consume"
  136. case MethodStatementPrepare:
  137. return "statement_prepare"
  138. case MethodStatementClose:
  139. return "statement_close"
  140. case MethodHttp2ClientFrames:
  141. return "http2_client_frames"
  142. case MethodHttp2ServerFrames:
  143. return "http2_server_frames"
  144. }
  145. return "UNKNOWN:" + strconv.Itoa(int(m))
  146. }
  147. type Status int
  148. const (
  149. StatusUnknown Status = 0
  150. StatusOk Status = 200
  151. StatusFailed Status = 500
  152. )
  153. func (s Status) String() string {
  154. switch s {
  155. case StatusUnknown:
  156. return "unknown"
  157. case StatusOk:
  158. return "ok"
  159. case StatusFailed:
  160. return "failed"
  161. }
  162. return strconv.Itoa(int(s))
  163. }
  164. func (s Status) Http() string {
  165. return strconv.Itoa(int(s))
  166. }
  167. func (s Status) DNS() string {
  168. switch s {
  169. case 0:
  170. return "ok"
  171. case 1:
  172. return "format_error"
  173. case 2:
  174. return "servfail"
  175. case 3:
  176. return "nxdomain"
  177. case 4:
  178. return "not_implemented"
  179. case 5:
  180. return "refused"
  181. }
  182. return ""
  183. }
  184. func (s Status) Error() bool {
  185. return s == StatusFailed
  186. }
  187. type RequestData struct {
  188. Protocol Protocol
  189. Pid uint32
  190. Status Status
  191. Duration time.Duration
  192. Method Method
  193. StatementId uint32
  194. Payload []byte
  195. TraceId uint64
  196. TraceStart uint32
  197. TraceEnd uint32
  198. TraceType uint32
  199. EventCount uint32
  200. AssumedAppId string
  201. SpanId string
  202. StartAt uint64
  203. EndAt uint64
  204. SAddr netaddr.IPPort
  205. DAddr netaddr.IPPort
  206. ComponentSAddr netaddr.IPPort
  207. ComponentDAddr netaddr.IPPort
  208. DestAddrString string
  209. ParentSpanContext struct {
  210. TraceIdFrom string
  211. CalledId string
  212. InstanceIdFrom string
  213. AppIdFrom string
  214. SpanIdFrom string
  215. TypeFrom string
  216. }
  217. SysvcFrom string // cwother header value: NN:ParentServiceName:MM:ParentServiceSysTag
  218. ErrorMsg string
  219. IsTls bool
  220. MQTopic string // MQ topic (e.g., Kafka topic)
  221. MQKey string // MQ key (e.g., Kafka message key)
  222. }