-
Notifications
You must be signed in to change notification settings - Fork 138
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: support rocketMQ --------- Signed-off-by: spencercjh <spencercjh@gmail.com> Co-authored-by: Spencer Cai <spencercjh@gmail.com> Co-authored-by: 烈香 <hengyoush1@163.com>
- Loading branch information
1 parent
0fe020c
commit 8ff2696
Showing
17 changed files
with
811 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package rocketmq | ||
|
||
import ( | ||
"kyanos/agent/protocol" | ||
"kyanos/bpf" | ||
"kyanos/common" | ||
"slices" | ||
) | ||
|
||
type Filter struct { | ||
TargetRequestCodes []int32 | ||
TargetLanguageCodes []LanguageCode | ||
} | ||
|
||
func (m Filter) Filter(req protocol.ParsedMessage, resp protocol.ParsedMessage) bool { | ||
rocketMQReq, ok := req.(*RocketMQMessage) | ||
if !ok { | ||
common.ProtocolParserLog.Warnf("[RocketMQFilter] cast to RocketMQMessage failed: %v\n", req) | ||
return false | ||
} | ||
|
||
pass := true | ||
|
||
pass = pass && (len(m.TargetRequestCodes) == 0 || slices.Index(m.TargetRequestCodes, int32(rocketMQReq.RequestCode)) != -1) | ||
pass = pass && (len(m.TargetLanguageCodes) == 0 || slices.Index(m.TargetLanguageCodes, rocketMQReq.LanguageCode) != -1) | ||
|
||
return pass | ||
} | ||
|
||
func (m Filter) FilterByProtocol(p bpf.AgentTrafficProtocolT) bool { | ||
return p == bpf.AgentTrafficProtocolTKProtocolRocketMQ | ||
} | ||
|
||
func (m Filter) FilterByRequest() bool { | ||
return len(m.TargetRequestCodes) > 0 || len(m.TargetLanguageCodes) > 0 | ||
} | ||
|
||
func (m Filter) FilterByResponse() bool { | ||
return len(m.TargetRequestCodes) > 0 || len(m.TargetLanguageCodes) > 0 | ||
} | ||
|
||
var _ protocol.ProtocolFilter = Filter{} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package rocketmq | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
) | ||
|
||
type LanguageCode byte | ||
|
||
const ( | ||
JAVA LanguageCode = iota // 0 | ||
CPP // 1 | ||
DOTNET // 2 | ||
PYTHON // 3 | ||
DELPHI // 4 | ||
ERLANG // 5 | ||
RUBY // 6 | ||
OTHER // 7 | ||
HTTP // 8 | ||
GO // 9 | ||
PHP // 10 | ||
OMS // 11 | ||
RUST // 12 | ||
NODE_JS // 13 | ||
UNKNOWN_LANGUAGE | ||
) | ||
|
||
// ConvertToLanguageCode converts a string to a LanguageCode. | ||
func ConvertToLanguageCode(language string) (LanguageCode, error) { | ||
switch language { | ||
case "JAVA": | ||
return JAVA, nil | ||
case "CPP": | ||
return CPP, nil | ||
case "DOTNET": | ||
return DOTNET, nil | ||
case "PYTHON": | ||
return PYTHON, nil | ||
case "DELPHI": | ||
return DELPHI, nil | ||
case "ERLANG": | ||
return ERLANG, nil | ||
case "RUBY": | ||
return RUBY, nil | ||
case "OTHER": | ||
return OTHER, nil | ||
case "HTTP": | ||
return HTTP, nil | ||
case "GO": | ||
return GO, nil | ||
case "PHP": | ||
return PHP, nil | ||
case "OMS": | ||
return OMS, nil | ||
case "RUST": | ||
return RUST, nil | ||
case "NODE_JS": | ||
return NODE_JS, nil | ||
default: | ||
return 13, errors.New("unknown language: " + language) | ||
} | ||
} | ||
|
||
// convertToLanguageCodeFromByte converts a byte to a LanguageCode. | ||
func convertToLanguageCodeFromByte(flag byte) (LanguageCode, error) { | ||
if flag > 13 { | ||
return 0, errors.New("unknown language flag: " + fmt.Sprint(flag)) | ||
} | ||
return LanguageCode(flag), nil | ||
} | ||
|
||
func (lc LanguageCode) String() string { | ||
switch lc { | ||
case JAVA: | ||
return "JAVA" | ||
case CPP: | ||
return "CPP" | ||
case DOTNET: | ||
return "DOTNET" | ||
case PYTHON: | ||
return "PYTHON" | ||
case DELPHI: | ||
return "DELPHI" | ||
case ERLANG: | ||
return "ERLANG" | ||
case RUBY: | ||
return "RUBY" | ||
case OTHER: | ||
return "OTHER" | ||
case HTTP: | ||
return "HTTP" | ||
case GO: | ||
return "GO" | ||
case PHP: | ||
return "PHP" | ||
case OMS: | ||
return "OMS" | ||
case RUST: | ||
return "RUST" | ||
case NODE_JS: | ||
return "NODE_JS" | ||
default: | ||
return "UNKNOWN" | ||
} | ||
} |
Oops, something went wrong.