Преглед изворни кода

psiphond: handle "remote_server_list_stats" logs

Rod Hynes пре 9 година
родитељ
комит
dbe415d930
2 измењених фајлова са 45 додато и 5 уклоњено
  1. 44 4
      psiphon/server/api.go
  2. 1 1
      psiphon/serverApi.go

+ 44 - 4
psiphon/server/api.go

@@ -284,11 +284,14 @@ func statusAPIRequestHandler(
 		if err != nil {
 			return nil, common.ContextError(err)
 		}
-		domainBytesFields := getRequestLogFields(
-			support, "domain_bytes", geoIPData, params, statusRequestParams)
 		for domain, bytes := range hostBytes {
+
+			domainBytesFields := getRequestLogFields(
+				support, "domain_bytes", geoIPData, params, statusRequestParams)
+
 			domainBytesFields["domain"] = domain
 			domainBytesFields["bytes"] = bytes
+
 			logQueue = append(logQueue, domainBytesFields)
 		}
 	}
@@ -302,10 +305,11 @@ func statusAPIRequestHandler(
 		if err != nil {
 			return nil, common.ContextError(err)
 		}
-		sessionFields := getRequestLogFields(
-			support, "session", geoIPData, params, statusRequestParams)
 		for _, tunnelStat := range tunnelStats {
 
+			sessionFields := getRequestLogFields(
+				support, "session", geoIPData, params, statusRequestParams)
+
 			sessionID, err := getStringRequestParam(tunnelStat, "session_id")
 			if err != nil {
 				return nil, common.ContextError(err)
@@ -372,6 +376,42 @@ func statusAPIRequestHandler(
 		}
 	}
 
+	// Remote server list download stats
+	// Older clients may not submit this data
+
+	if statusData["remote_server_list_stats"] != nil {
+
+		remoteServerListStats, err := getJSONObjectArrayRequestParam(statusData, "remote_server_list_stats")
+		if err != nil {
+			return nil, common.ContextError(err)
+		}
+		for _, tunnelStat := range tunnelStats {
+
+			remoteServerListFields := getRequestLogFields(
+				support, "remote_server_list", geoIPData, params, statusRequestParams)
+
+			clientDownloadTimestamp, err := getStringRequestParam(tunnelStat, "client_download_timestamp")
+			if err != nil {
+				return nil, common.ContextError(err)
+			}
+			remoteServerListFields["client_download_timestamp"] = clientDownloadTimestamp
+
+			url, err := getStringRequestParam(tunnelStat, "url")
+			if err != nil {
+				return nil, common.ContextError(err)
+			}
+			remoteServerListFields["url"] = url
+
+			etag, err := getStringRequestParam(tunnelStat, "etag")
+			if err != nil {
+				return nil, common.ContextError(err)
+			}
+			remoteServerListFields["etag"] = etag
+
+			logQueue = append(logQueue, remoteServerListFields)
+		}
+	}
+
 	for _, logItem := range logQueue {
 		log.LogRawFieldsWithTimestamp(logItem)
 	}

+ 1 - 1
psiphon/serverApi.go

@@ -428,7 +428,7 @@ func makeStatusRequestPayload(
 
 	persistentStatPayloadNames := make(map[string]string)
 	persistentStatPayloadNames[PERSISTENT_STAT_TYPE_TUNNEL] = "tunnel_stats"
-	persistentStatPayloadNames[PERSISTENT_STAT_TYPE_REMOTE_SERVER_LIST] = "remote_server_list"
+	persistentStatPayloadNames[PERSISTENT_STAT_TYPE_REMOTE_SERVER_LIST] = "remote_server_list_stats"
 
 	for statType, stats := range persistentStats {