l7.go 4.6 KB

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