app.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package containers
  2. import (
  3. "bytes"
  4. "regexp"
  5. )
  6. var (
  7. phpCmd = regexp.MustCompile(`.*php\d*\.?\d*$`)
  8. pythonCmd = regexp.MustCompile(`.*python\d*\.?\d*$`)
  9. nodejsCmd = regexp.MustCompile(`.*node(js)?\d*\.?\d*$`)
  10. )
  11. func guessApplicationType(cmdline []byte) string {
  12. parts := bytes.Split(cmdline, []byte{0})
  13. if len(parts) == 0 || len(parts[0]) == 0 {
  14. return ""
  15. }
  16. cmd := bytes.TrimSuffix(bytes.Fields(parts[0])[0], []byte{':'})
  17. switch {
  18. case bytes.HasSuffix(cmd, []byte("memcached")):
  19. return "memcached"
  20. case bytes.HasSuffix(cmd, []byte("envoy")):
  21. return "envoy"
  22. case bytes.Contains(cmdline, []byte("org.elasticsearch.bootstrap")):
  23. return "elasticsearch"
  24. case bytes.Contains(cmdline, []byte("kafka.Kafka")) || bytes.Contains(cmdline, []byte("io.confluent.support.metrics.SupportedKafka")):
  25. return "kafka"
  26. case bytes.HasSuffix(cmd, []byte("mongod")):
  27. return "mongodb"
  28. case bytes.HasSuffix(cmd, []byte("mongos")):
  29. return "mongos"
  30. case bytes.HasSuffix(cmd, []byte("mysqld")):
  31. return "mysql"
  32. case bytes.HasSuffix(cmd, []byte("mariadbd")):
  33. return "mysql"
  34. case bytes.Contains(cmdline, []byte("org.apache.zookeeper.server.quorum.QuorumPeerMain")):
  35. return "zookeeper"
  36. case bytes.HasSuffix(cmd, []byte("redis-server")):
  37. return "redis"
  38. case bytes.HasSuffix(cmd, []byte("redis-sentinel")):
  39. return "redis-sentinel"
  40. case bytes.HasSuffix(cmd, []byte("keydb-server")):
  41. return "keydb"
  42. case bytes.HasSuffix(cmd, []byte("beam.smp")) && bytes.Contains(cmdline, []byte("rabbit")):
  43. return "rabbitmq"
  44. case bytes.HasSuffix(cmd, []byte("beam.smp")) && bytes.Contains(cmdline, []byte("couch")):
  45. return "couchbase"
  46. case bytes.HasSuffix(cmd, []byte("pgbouncer")):
  47. return "pgbouncer"
  48. case bytes.HasSuffix(cmd, []byte("postgres")):
  49. return "postgres"
  50. case bytes.HasSuffix(cmd, []byte("haproxy")):
  51. return "haproxy"
  52. case bytes.HasSuffix(cmd, []byte("nginx")):
  53. return "nginx"
  54. case bytes.HasSuffix(cmd, []byte("kubelet")):
  55. return "kubelet"
  56. case bytes.HasSuffix(cmd, []byte("kube-apiserver")):
  57. return "kube-apiserver"
  58. case bytes.HasSuffix(cmd, []byte("kube-controller-manager")):
  59. return "kube-controller-manager"
  60. case bytes.HasSuffix(cmd, []byte("kube-scheduler")):
  61. return "kube-scheduler"
  62. case bytes.HasSuffix(cmd, []byte("k3s")):
  63. return "k3s"
  64. case bytes.HasSuffix(cmd, []byte("etcd")):
  65. return "etcd"
  66. case bytes.HasSuffix(cmd, []byte("dockerd")):
  67. return "dockerd"
  68. case bytes.HasSuffix(cmd, []byte("consul")):
  69. return "consul"
  70. case bytes.Contains(cmdline, []byte("org.apache.cassandra.service.CassandraDaemon")):
  71. return "cassandra"
  72. case bytes.HasSuffix(cmd, []byte("clickhouse-server")):
  73. return "clickhouse"
  74. case bytes.HasSuffix(cmd, []byte("traefik")):
  75. return "traefik"
  76. case bytes.HasSuffix(cmd, []byte("asd")):
  77. return "aerospike"
  78. case bytes.HasSuffix(cmd, []byte("httpd")):
  79. return "httpd"
  80. case bytes.HasSuffix(cmd, []byte("influxd")):
  81. return "influxdb"
  82. case bytes.Contains(cmdline, []byte("org.apache.catalina.startup.Bootstrap")):
  83. return "tomcat"
  84. case bytes.HasSuffix(cmd, []byte("vault")):
  85. return "vault"
  86. case bytes.HasSuffix(cmd, []byte("proxysql")):
  87. return "proxysql"
  88. case bytes.HasSuffix(cmd, []byte("cockroach")):
  89. return "cockroach"
  90. case bytes.HasSuffix(cmd, []byte("prometheus")):
  91. return "prometheus"
  92. case bytes.HasSuffix(cmd, []byte("ceph-mon")) ||
  93. bytes.HasSuffix(cmd, []byte("ceph-mgr")) ||
  94. bytes.HasSuffix(cmd, []byte("ceph-osd")) ||
  95. bytes.HasSuffix(cmd, []byte("cephcsi")):
  96. return "ceph"
  97. case bytes.HasSuffix(cmd, []byte("rook")):
  98. return "rook"
  99. case bytes.HasSuffix(cmd, []byte("nats-server")):
  100. return "nats"
  101. case bytes.HasSuffix(cmd, []byte("java")):
  102. return "java"
  103. case phpCmd.Match(cmd):
  104. return "php"
  105. case pythonCmd.Match(cmd):
  106. return "python"
  107. case nodejsCmd.Match(cmd):
  108. return "nodejs"
  109. }
  110. return ""
  111. }