+
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions auditor/auditor.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ func Audit(w *model.World, p *db.Project, generateDetailedReportFor *model.Appli
stages.stage("jvm", a.jvm)
stages.stage("dotnet", a.dotnet)
stages.stage("python", a.python)
stages.stage("nodejs", a.nodejs)
stages.stage("logs", a.logs)
stages.stage("deployments", a.deployments)

Expand Down
26 changes: 26 additions & 0 deletions auditor/nodejs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package auditor

import (
"github.com/coroot/coroot/model"
)

func (a *appAuditor) nodejs() {
if !a.app.IsNodejs() {
return
}

report := a.addReport(model.AuditReportNodejs)
check := report.CreateCheck(model.Checks.NodejsEventLoopBlockedTime)
chart := report.GetOrCreateChart("Node.js event loop blocked time, seconds/second", nil)
for _, i := range a.app.Instances {
if i.Nodejs == nil {
continue
}
if i.Nodejs.EventLoopBlockedTime.Last() > check.Threshold {
check.AddItem(i.Name)
}
if chart != nil {
chart.AddSeries(i.Name, i.Nodejs.EventLoopBlockedTime)
}
}
}
1 change: 1 addition & 0 deletions constructor/constructor.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ func (c *Constructor) LoadWorld(ctx context.Context, from, to timeseries.Time, s
prof.stage("load_jvm", func() { c.loadJVM(metrics, containers) })
prof.stage("load_dotnet", func() { c.loadDotNet(metrics, containers) })
prof.stage("load_python", func() { c.loadPython(metrics, containers) })
prof.stage("load_nodejs", func() { c.loadNodejs(metrics, containers) })
prof.stage("enrich_instances", func() { enrichInstances(w, metrics, rdsInstancesById, ecInstancesById) })
prof.stage("calc_app_categories", func() { c.calcApplicationCategories(w) })
prof.stage("group_custom_applications", func() { c.groupCustomApplications(w) })
Expand Down
24 changes: 24 additions & 0 deletions constructor/nodejs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package constructor

import (
"github.com/coroot/coroot/model"
"github.com/coroot/coroot/timeseries"
)

func (c *Constructor) loadNodejs(metrics map[string][]*model.MetricValues, containers containerCache) {
load := func(queryName string, f func(nodejs *model.Nodejs, metric *model.MetricValues)) {
for _, metric := range metrics[queryName] {
v := containers[metric.NodeContainerId]
if v.instance == nil {
continue
}
if v.instance.Nodejs == nil {
v.instance.Nodejs = &model.Nodejs{}
}
f(v.instance.Nodejs, metric)
}
}
load("container_nodejs_event_loop_blocked_time_seconds", func(nodejs *model.Nodejs, metric *model.MetricValues) {
nodejs.EventLoopBlockedTime = merge(nodejs.EventLoopBlockedTime, metric.Values, timeseries.Any)
})
}
1 change: 1 addition & 0 deletions constructor/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ var QUERIES = []Query{
qDotNet("container_dotnet_thread_pool_size", `container_dotnet_thread_pool_size`),

Q("container_python_thread_lock_wait_time_seconds", `rate(container_python_thread_lock_wait_time_seconds[$RANGE])`),
Q("container_nodejs_event_loop_blocked_time_seconds", `rate(container_nodejs_event_loop_blocked_time_seconds_total[$RANGE])`),
}

var RecordingRules = map[string]func(db *db.DB, p *db.Project, w *model.World) []*model.MetricValues{
Expand Down
9 changes: 9 additions & 0 deletions model/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,15 @@ func (app *Application) IsPython() bool {
return false
}

func (app *Application) IsNodejs() bool {
for _, i := range app.Instances {
if i.Nodejs != nil {
return true
}
}
return false
}

func (app *Application) IsStandalone() bool {
for _, d := range app.Downstreams {
if d.Application != d.RemoteApplication {
Expand Down
2 changes: 2 additions & 0 deletions model/application_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ func (at ApplicationType) AuditReport() AuditReportName {
return AuditReportDotNet
case ApplicationTypePython:
return AuditReportPython
case ApplicationTypeNodeJS:
return AuditReportNodejs
}
return ""
}
Expand Down
1 change: 1 addition & 0 deletions model/audit_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const (
AuditReportJvm AuditReportName = "JVM"
AuditReportDotNet AuditReportName = ".NET"
AuditReportPython AuditReportName = "Python"
AuditReportNodejs AuditReportName = "Node.js"
AuditReportNode AuditReportName = "Node"
AuditReportDeployments AuditReportName = "Deployments"
AuditReportProfiling AuditReportName = "Profiling"
Expand Down
79 changes: 44 additions & 35 deletions model/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,41 +62,42 @@ type CheckConfig struct {
var Checks = struct {
index map[CheckId]*CheckConfig

SLOAvailability CheckConfig
SLOLatency CheckConfig
CPUNode CheckConfig
CPUContainer CheckConfig
MemoryOOM CheckConfig
MemoryLeakPercent CheckConfig
StorageSpace CheckConfig
StorageIOLoad CheckConfig
NetworkRTT CheckConfig
NetworkConnectivity CheckConfig
NetworkTCPConnections CheckConfig
InstanceAvailability CheckConfig
DeploymentStatus CheckConfig
InstanceRestarts CheckConfig
RedisAvailability CheckConfig
RedisLatency CheckConfig
MongodbAvailability CheckConfig
MongodbReplicationLag CheckConfig
MemcachedAvailability CheckConfig
PostgresAvailability CheckConfig
PostgresLatency CheckConfig
PostgresReplicationLag CheckConfig
PostgresConnections CheckConfig
LogErrors CheckConfig
JvmAvailability CheckConfig
JvmSafepointTime CheckConfig
DotNetAvailability CheckConfig
PythonGILWaitingTime CheckConfig
DnsLatency CheckConfig
DnsServerErrors CheckConfig
DnsNxdomainErrors CheckConfig
MysqlAvailability CheckConfig
MysqlReplicationStatus CheckConfig
MysqlReplicationLag CheckConfig
MysqlConnections CheckConfig
SLOAvailability CheckConfig
SLOLatency CheckConfig
CPUNode CheckConfig
CPUContainer CheckConfig
MemoryOOM CheckConfig
MemoryLeakPercent CheckConfig
StorageSpace CheckConfig
StorageIOLoad CheckConfig
NetworkRTT CheckConfig
NetworkConnectivity CheckConfig
NetworkTCPConnections CheckConfig
InstanceAvailability CheckConfig
DeploymentStatus CheckConfig
InstanceRestarts CheckConfig
RedisAvailability CheckConfig
RedisLatency CheckConfig
MongodbAvailability CheckConfig
MongodbReplicationLag CheckConfig
MemcachedAvailability CheckConfig
PostgresAvailability CheckConfig
PostgresLatency CheckConfig
PostgresReplicationLag CheckConfig
PostgresConnections CheckConfig
LogErrors CheckConfig
JvmAvailability CheckConfig
JvmSafepointTime CheckConfig
DotNetAvailability CheckConfig
PythonGILWaitingTime CheckConfig
NodejsEventLoopBlockedTime CheckConfig
DnsLatency CheckConfig
DnsServerErrors CheckConfig
DnsNxdomainErrors CheckConfig
MysqlAvailability CheckConfig
MysqlReplicationStatus CheckConfig
MysqlReplicationLag CheckConfig
MysqlConnections CheckConfig
}{
index: map[CheckId]*CheckConfig{},

Expand Down Expand Up @@ -312,6 +313,14 @@ var Checks = struct {
ConditionFormatTemplate: "the time Python threads have been waiting for acquiring the GIL (Global Interpreter Lock) > <threshold>",
Unit: CheckUnitSecond,
},
NodejsEventLoopBlockedTime: CheckConfig{
Type: CheckTypeItemBased,
Title: "Node.js event loop blocked time",
DefaultThreshold: 0.7,
MessageTemplate: `high Node.js event loop blocked times on {{.Items "Node.js instance"}}`,
ConditionFormatTemplate: "the time Node.js event loop executes blocking code > <threshold>",
Unit: CheckUnitSecond,
},
DnsLatency: CheckConfig{
Type: CheckTypeValueBased,
Title: "DNS latency",
Expand Down
1 change: 1 addition & 0 deletions model/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type Instance struct {
Jvms map[string]*Jvm
DotNet map[string]*DotNet
Python *Python
Nodejs *Nodejs

Volumes []*Volume

Expand Down
7 changes: 7 additions & 0 deletions model/nodejs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package model

import "github.com/coroot/coroot/timeseries"

type Nodejs struct {
EventLoopBlockedTime *timeseries.TimeSeries
}
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载