Explorar o código

Fix: include server_entry_tag in all server_load logs

Rod Hynes hai 3 meses
pai
achega
70f9891b43

+ 25 - 5
psiphon/server/pb/psiphond/server_load.pb.go

@@ -28,6 +28,7 @@ type ServerLoadProtocol struct {
 	Protocol           *string                `protobuf:"bytes,101,opt,name=protocol,proto3,oneof" json:"protocol,omitempty"`
 	Protocol           *string                `protobuf:"bytes,101,opt,name=protocol,proto3,oneof" json:"protocol,omitempty"`
 	AcceptedClients    *int64                 `protobuf:"varint,102,opt,name=accepted_clients,json=acceptedClients,proto3,oneof" json:"accepted_clients,omitempty"`
 	AcceptedClients    *int64                 `protobuf:"varint,102,opt,name=accepted_clients,json=acceptedClients,proto3,oneof" json:"accepted_clients,omitempty"`
 	EstablishedClients *int64                 `protobuf:"varint,103,opt,name=established_clients,json=establishedClients,proto3,oneof" json:"established_clients,omitempty"`
 	EstablishedClients *int64                 `protobuf:"varint,103,opt,name=established_clients,json=establishedClients,proto3,oneof" json:"established_clients,omitempty"`
+	ServerEntryTag     *string                `protobuf:"bytes,104,opt,name=server_entry_tag,json=serverEntryTag,proto3,oneof" json:"server_entry_tag,omitempty"`
 	unknownFields      protoimpl.UnknownFields
 	unknownFields      protoimpl.UnknownFields
 	sizeCache          protoimpl.SizeCache
 	sizeCache          protoimpl.SizeCache
 }
 }
@@ -90,6 +91,13 @@ func (x *ServerLoadProtocol) GetEstablishedClients() int64 {
 	return 0
 	return 0
 }
 }
 
 
+func (x *ServerLoadProtocol) GetServerEntryTag() string {
+	if x != nil && x.ServerEntryTag != nil {
+		return *x.ServerEntryTag
+	}
+	return ""
+}
+
 type ServerLoadDNS struct {
 type ServerLoadDNS struct {
 	state             protoimpl.MessageState `protogen:"open.v1"`
 	state             protoimpl.MessageState `protogen:"open.v1"`
 	DnsServer         *string                `protobuf:"bytes,100,opt,name=dns_server,json=dnsServer,proto3,oneof" json:"dns_server,omitempty"`
 	DnsServer         *string                `protobuf:"bytes,100,opt,name=dns_server,json=dnsServer,proto3,oneof" json:"dns_server,omitempty"`
@@ -97,6 +105,7 @@ type ServerLoadDNS struct {
 	DnsDuration       *int64                 `protobuf:"varint,102,opt,name=dns_duration,json=dnsDuration,proto3,oneof" json:"dns_duration,omitempty"`
 	DnsDuration       *int64                 `protobuf:"varint,102,opt,name=dns_duration,json=dnsDuration,proto3,oneof" json:"dns_duration,omitempty"`
 	DnsFailedCount    *int64                 `protobuf:"varint,103,opt,name=dns_failed_count,json=dnsFailedCount,proto3,oneof" json:"dns_failed_count,omitempty"`
 	DnsFailedCount    *int64                 `protobuf:"varint,103,opt,name=dns_failed_count,json=dnsFailedCount,proto3,oneof" json:"dns_failed_count,omitempty"`
 	DnsFailedDuration *int64                 `protobuf:"varint,104,opt,name=dns_failed_duration,json=dnsFailedDuration,proto3,oneof" json:"dns_failed_duration,omitempty"`
 	DnsFailedDuration *int64                 `protobuf:"varint,104,opt,name=dns_failed_duration,json=dnsFailedDuration,proto3,oneof" json:"dns_failed_duration,omitempty"`
+	ServerEntryTag    *string                `protobuf:"bytes,105,opt,name=server_entry_tag,json=serverEntryTag,proto3,oneof" json:"server_entry_tag,omitempty"`
 	unknownFields     protoimpl.UnknownFields
 	unknownFields     protoimpl.UnknownFields
 	sizeCache         protoimpl.SizeCache
 	sizeCache         protoimpl.SizeCache
 }
 }
@@ -166,6 +175,13 @@ func (x *ServerLoadDNS) GetDnsFailedDuration() int64 {
 	return 0
 	return 0
 }
 }
 
 
+func (x *ServerLoadDNS) GetServerEntryTag() string {
+	if x != nil && x.ServerEntryTag != nil {
+		return *x.ServerEntryTag
+	}
+	return ""
+}
+
 type ServerLoad struct {
 type ServerLoad struct {
 	state                                   protoimpl.MessageState `protogen:"open.v1"`
 	state                                   protoimpl.MessageState `protogen:"open.v1"`
 	CpuPercent                              *float64               `protobuf:"fixed64,100,opt,name=cpu_percent,json=cpuPercent,proto3,oneof" json:"cpu_percent,omitempty"`
 	CpuPercent                              *float64               `protobuf:"fixed64,100,opt,name=cpu_percent,json=cpuPercent,proto3,oneof" json:"cpu_percent,omitempty"`
@@ -574,29 +590,33 @@ var File_ca_psiphon_psiphond_server_load_proto protoreflect.FileDescriptor
 
 
 const file_ca_psiphon_psiphond_server_load_proto_rawDesc = "" +
 const file_ca_psiphon_psiphond_server_load_proto_rawDesc = "" +
 	"\n" +
 	"\n" +
-	"%ca.psiphon.psiphond/server_load.proto\x12\x13ca.psiphon.psiphond\x1a\x1fgoogle/protobuf/timestamp.proto\"\xfd\x01\n" +
+	"%ca.psiphon.psiphond/server_load.proto\x12\x13ca.psiphon.psiphond\x1a\x1fgoogle/protobuf/timestamp.proto\"\xc1\x02\n" +
 	"\x12ServerLoadProtocol\x12\x1b\n" +
 	"\x12ServerLoadProtocol\x12\x1b\n" +
 	"\x06region\x18d \x01(\tH\x00R\x06region\x88\x01\x01\x12\x1f\n" +
 	"\x06region\x18d \x01(\tH\x00R\x06region\x88\x01\x01\x12\x1f\n" +
 	"\bprotocol\x18e \x01(\tH\x01R\bprotocol\x88\x01\x01\x12.\n" +
 	"\bprotocol\x18e \x01(\tH\x01R\bprotocol\x88\x01\x01\x12.\n" +
 	"\x10accepted_clients\x18f \x01(\x03H\x02R\x0facceptedClients\x88\x01\x01\x124\n" +
 	"\x10accepted_clients\x18f \x01(\x03H\x02R\x0facceptedClients\x88\x01\x01\x124\n" +
-	"\x13established_clients\x18g \x01(\x03H\x03R\x12establishedClients\x88\x01\x01B\t\n" +
+	"\x13established_clients\x18g \x01(\x03H\x03R\x12establishedClients\x88\x01\x01\x12-\n" +
+	"\x10server_entry_tag\x18h \x01(\tH\x04R\x0eserverEntryTag\x88\x01\x01B\t\n" +
 	"\a_regionB\v\n" +
 	"\a_regionB\v\n" +
 	"\t_protocolB\x13\n" +
 	"\t_protocolB\x13\n" +
 	"\x11_accepted_clientsB\x16\n" +
 	"\x11_accepted_clientsB\x16\n" +
-	"\x14_established_clients\"\xbc\x02\n" +
+	"\x14_established_clientsB\x13\n" +
+	"\x11_server_entry_tag\"\x80\x03\n" +
 	"\rServerLoadDNS\x12\"\n" +
 	"\rServerLoadDNS\x12\"\n" +
 	"\n" +
 	"\n" +
 	"dns_server\x18d \x01(\tH\x00R\tdnsServer\x88\x01\x01\x12 \n" +
 	"dns_server\x18d \x01(\tH\x00R\tdnsServer\x88\x01\x01\x12 \n" +
 	"\tdns_count\x18e \x01(\x03H\x01R\bdnsCount\x88\x01\x01\x12&\n" +
 	"\tdns_count\x18e \x01(\x03H\x01R\bdnsCount\x88\x01\x01\x12&\n" +
 	"\fdns_duration\x18f \x01(\x03H\x02R\vdnsDuration\x88\x01\x01\x12-\n" +
 	"\fdns_duration\x18f \x01(\x03H\x02R\vdnsDuration\x88\x01\x01\x12-\n" +
 	"\x10dns_failed_count\x18g \x01(\x03H\x03R\x0ednsFailedCount\x88\x01\x01\x123\n" +
 	"\x10dns_failed_count\x18g \x01(\x03H\x03R\x0ednsFailedCount\x88\x01\x01\x123\n" +
-	"\x13dns_failed_duration\x18h \x01(\x03H\x04R\x11dnsFailedDuration\x88\x01\x01B\r\n" +
+	"\x13dns_failed_duration\x18h \x01(\x03H\x04R\x11dnsFailedDuration\x88\x01\x01\x12-\n" +
+	"\x10server_entry_tag\x18i \x01(\tH\x05R\x0eserverEntryTag\x88\x01\x01B\r\n" +
 	"\v_dns_serverB\f\n" +
 	"\v_dns_serverB\f\n" +
 	"\n" +
 	"\n" +
 	"_dns_countB\x0f\n" +
 	"_dns_countB\x0f\n" +
 	"\r_dns_durationB\x13\n" +
 	"\r_dns_durationB\x13\n" +
 	"\x11_dns_failed_countB\x16\n" +
 	"\x11_dns_failed_countB\x16\n" +
-	"\x14_dns_failed_duration\"\x81\"\n" +
+	"\x14_dns_failed_durationB\x13\n" +
+	"\x11_server_entry_tag\"\x81\"\n" +
 	"\n" +
 	"\n" +
 	"ServerLoad\x12$\n" +
 	"ServerLoad\x12$\n" +
 	"\vcpu_percent\x18d \x01(\x01H\x00R\n" +
 	"\vcpu_percent\x18d \x01(\x01H\x00R\n" +

+ 2 - 11
psiphon/server/proto/ca.psiphon.psiphond/server_load.proto

@@ -11,9 +11,9 @@ message ServerLoadProtocol {
 
 
     optional string region = 100;
     optional string region = 100;
     optional string protocol = 101;
     optional string protocol = 101;
-
     optional int64 accepted_clients = 102;
     optional int64 accepted_clients = 102;
     optional int64 established_clients = 103;
     optional int64 established_clients = 103;
+    optional string server_entry_tag = 104;
 }
 }
 
 
 message ServerLoadDNS {
 message ServerLoadDNS {
@@ -24,43 +24,37 @@ message ServerLoadDNS {
     optional int64 dns_duration = 102;
     optional int64 dns_duration = 102;
     optional int64 dns_failed_count = 103;
     optional int64 dns_failed_count = 103;
     optional int64 dns_failed_duration = 104;
     optional int64 dns_failed_duration = 104;
+    optional string server_entry_tag = 105;
 }
 }
 
 
 message ServerLoad {
 message ServerLoad {
   // Fields 1-99 are reserved for field groupings.
   // Fields 1-99 are reserved for field groupings.
 
 
     optional double cpu_percent = 100;
     optional double cpu_percent = 100;
-
     optional int64 heap_alloc = 101;
     optional int64 heap_alloc = 101;
     optional int64 heap_idle = 102;
     optional int64 heap_idle = 102;
     optional int64 heap_inuse = 103;
     optional int64 heap_inuse = 103;
     optional int64 heap_objects = 104;
     optional int64 heap_objects = 104;
     optional int64 heap_released = 105;
     optional int64 heap_released = 105;
     optional int64 heap_sys = 106;
     optional int64 heap_sys = 106;
-
     optional int64 network_bytes_received = 107;
     optional int64 network_bytes_received = 107;
     optional int64 network_bytes_sent = 108;
     optional int64 network_bytes_sent = 108;
-
     optional bool establish_tunnels = 109;
     optional bool establish_tunnels = 109;
     optional int64 establish_tunnels_limited_count = 110;
     optional int64 establish_tunnels_limited_count = 110;
-
     optional google.protobuf.Timestamp last_gc = 111;
     optional google.protobuf.Timestamp last_gc = 111;
     optional int64 num_forced_gc = 112;
     optional int64 num_forced_gc = 112;
     optional int64 num_gc = 113;
     optional int64 num_gc = 113;
     optional int64 num_goroutine = 114;
     optional int64 num_goroutine = 114;
-
     optional int64 replay_delete_replay_count = 115;
     optional int64 replay_delete_replay_count = 115;
     optional int64 replay_failed_replay_count = 116;
     optional int64 replay_failed_replay_count = 116;
     optional int64 replay_get_replay_hit_count = 117;
     optional int64 replay_get_replay_hit_count = 117;
     optional int64 replay_get_replay_miss_count = 118;
     optional int64 replay_get_replay_miss_count = 118;
     optional int64 replay_max_cache_entries = 119;
     optional int64 replay_max_cache_entries = 119;
     optional int64 replay_set_replay_count = 120;
     optional int64 replay_set_replay_count = 120;
-
     optional int64 server_tactics_cache_hit_count = 121;
     optional int64 server_tactics_cache_hit_count = 121;
     optional int64 server_tactics_cache_miss_count = 122;
     optional int64 server_tactics_cache_miss_count = 122;
     optional int64 server_tactics_max_cache_entries = 123;
     optional int64 server_tactics_max_cache_entries = 123;
     optional int64 server_tactics_max_parameter_references = 124;
     optional int64 server_tactics_max_parameter_references = 124;
-
     optional int64 dialing_tcp_port_forwards = 125;
     optional int64 dialing_tcp_port_forwards = 125;
     optional int64 tcp_ipv4_port_forward_dialed_count = 126;
     optional int64 tcp_ipv4_port_forward_dialed_count = 126;
     optional int64 tcp_ipv4_port_forward_dialed_duration = 127;
     optional int64 tcp_ipv4_port_forward_dialed_duration = 127;
@@ -77,12 +71,9 @@ message ServerLoad {
     optional int64 tcp_port_forward_rejected_dialing_limit_count = 138;
     optional int64 tcp_port_forward_rejected_dialing_limit_count = 138;
     optional int64 tcp_port_forward_rejected_disallowed_count = 139;
     optional int64 tcp_port_forward_rejected_disallowed_count = 139;
     optional int64 tcp_port_forwards = 140;
     optional int64 tcp_port_forwards = 140;
-
     optional int64 udp_port_forward_rejected_disallowed_count = 141;
     optional int64 udp_port_forward_rejected_disallowed_count = 141;
     optional int64 udp_port_forwards = 142;
     optional int64 udp_port_forwards = 142;
-
     optional int64 total_tcp_port_forwards = 143;
     optional int64 total_tcp_port_forwards = 143;
     optional int64 total_udp_port_forwards = 144;
     optional int64 total_udp_port_forwards = 144;
-
     optional string server_entry_tag = 145;
     optional string server_entry_tag = 145;
 }
 }

+ 8 - 0
psiphon/server/protobufConverter.go

@@ -226,6 +226,10 @@ func logFieldsToProtobuf(logFields LogFields) []*pbr.Router {
 						Region:   &regionString,
 						Region:   &regionString,
 					}
 					}
 
 
+					if value, exists := protoStats["server_entry_tag"].(string); exists {
+						msg.ServerEntryTag = &value
+					}
+
 					if value, exists := protoStats["accepted_clients"].(int64); exists {
 					if value, exists := protoStats["accepted_clients"].(int64); exists {
 						msg.AcceptedClients = &value
 						msg.AcceptedClients = &value
 					}
 					}
@@ -265,6 +269,10 @@ func logFieldsToProtobuf(logFields LogFields) []*pbr.Router {
 					DnsCount:  &count,
 					DnsCount:  &count,
 				}
 				}
 
 
+				if value, exists := logFields["server_entry_tag"].(string); exists {
+					msg.ServerEntryTag = &value
+				}
+
 				if value, exists := logFields["dns_failed_count"].(map[string]int64)[dns]; exists {
 				if value, exists := logFields["dns_failed_count"].(map[string]int64)[dns]; exists {
 					msg.DnsFailedCount = &value
 					msg.DnsFailedCount = &value
 				}
 				}

+ 4 - 1
psiphon/server/server_test.go

@@ -2446,12 +2446,15 @@ func runServer(t *testing.T, runConfig *runServerConfig) {
 
 
 	select {
 	select {
 	case logFields := <-serverLoadLog:
 	case logFields := <-serverLoadLog:
+		if logFields["server_entry_tag"] == nil ||
+			fmt.Sprintf("%s", logFields["server_entry_tag"]) == "" {
+			t.Fatalf("missing server_entry_tag")
+		}
 		if expectDomainPortForward {
 		if expectDomainPortForward {
 			dnsCount := int(logFields["dns_count"].(map[string]any)["ALL"].(float64))
 			dnsCount := int(logFields["dns_count"].(map[string]any)["ALL"].(float64))
 			if dnsCount != 1 {
 			if dnsCount != 1 {
 				t.Fatalf("unexpected dns_count: %d", dnsCount)
 				t.Fatalf("unexpected dns_count: %d", dnsCount)
 			}
 			}
-
 		}
 		}
 	default:
 	default:
 		t.Fatalf("missing server load log")
 		t.Fatalf("missing server load log")

+ 2 - 0
psiphon/server/services.go

@@ -561,6 +561,8 @@ func logServerLoad(
 			"region":     region,
 			"region":     region,
 		}
 		}
 
 
+		support.Config.AddServerEntryTag(serverLoad)
+
 		for protocol, stats := range regionProtocolStats {
 		for protocol, stats := range regionProtocolStats {
 			serverLoad[protocol] = stats
 			serverLoad[protocol] = stats
 		}
 		}