# Diagnostics # Traceroutes ## Traceroute `client.Diagnostics.Traceroutes.New(ctx, params) (*SinglePage[Traceroute], error)` **post** `/accounts/{account_id}/diagnostics/traceroute` Run traceroutes from Cloudflare colos. ### Parameters - `params TracerouteNewParams` - `AccountID param.Field[string]` Path param: Identifier - `Targets param.Field[[]string]` Body param - `Colos param.Field[[]string]` Body param: If no source colo names specified, all colos will be used. China colos are unavailable for traceroutes. - `Options param.Field[TracerouteNewParamsOptions]` Body param - `MaxTTL int64` Max TTL. - `PacketType TracerouteNewParamsOptionsPacketType` Type of packet sent. - `const TracerouteNewParamsOptionsPacketTypeIcmp TracerouteNewParamsOptionsPacketType = "icmp"` - `const TracerouteNewParamsOptionsPacketTypeTCP TracerouteNewParamsOptionsPacketType = "tcp"` - `const TracerouteNewParamsOptionsPacketTypeUdp TracerouteNewParamsOptionsPacketType = "udp"` - `const TracerouteNewParamsOptionsPacketTypeGRE TracerouteNewParamsOptionsPacketType = "gre"` - `const TracerouteNewParamsOptionsPacketTypeGREIcmp TracerouteNewParamsOptionsPacketType = "gre+icmp"` - `PacketsPerTTL int64` Number of packets sent at each TTL. - `Port int64` For UDP and TCP, specifies the destination port. For ICMP, specifies the initial ICMP sequence value. Default value 0 will choose the best value to use for each protocol. - `WaitTime int64` Set the time (in seconds) to wait for a response to a probe. ### Returns - `type Traceroute struct{…}` - `Colos []TracerouteColo` - `Colo TracerouteColosColo` - `City string` Source colo city. - `Name string` Source colo name. - `Error TracerouteColosError` Errors resulting from collecting traceroute from colo to target. - `const TracerouteColosErrorEmpty TracerouteColosError = ""` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode1 TracerouteColosError = "Could not gather traceroute data: Code 1"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode2 TracerouteColosError = "Could not gather traceroute data: Code 2"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode3 TracerouteColosError = "Could not gather traceroute data: Code 3"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode4 TracerouteColosError = "Could not gather traceroute data: Code 4"` - `Hops []TracerouteColosHop` - `Nodes []TracerouteColosHopsNode` An array of node objects. - `ASN string` AS number associated with the node object. - `IP string` IP address of the node. - `Labels []string` Field appears if there is an additional annotation printed when the probe returns. Field also appears when running a GRE+ICMP traceroute to denote which traceroute a node comes from. - `MaxRTTMs float64` Maximum RTT in ms. - `MeanRTTMs float64` Mean RTT in ms. - `MinRTTMs float64` Minimum RTT in ms. - `Name string` Host name of the address, this may be the same as the IP address. - `PacketCount int64` Number of packets with a response from this node. - `StdDevRTTMs float64` Standard deviation of the RTTs in ms. - `PacketsLost int64` Number of packets where no response was received. - `PacketsSent int64` Number of packets sent with specified TTL. - `PacketsTTL int64` The time to live (TTL). - `TargetSummary unknown` Aggregated statistics from all hops about the target. - `TracerouteTimeMs int64` Total time of traceroute in ms. - `Target string` The target hostname, IPv6, or IPv6 address. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) page, err := client.Diagnostics.Traceroutes.New(context.TODO(), diagnostics.TracerouteNewParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), Targets: cloudflare.F([]string{"203.0.113.1", "cloudflare.com"}), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": [ { "colos": [ { "colo": { "city": "Denver, CO, US", "name": "den01" }, "error": "", "hops": [ { "nodes": [ { "asn": "AS13335", "ip": "1.1.1.1", "labels": [ "string" ], "max_rtt_ms": 0, "mean_rtt_ms": 0, "min_rtt_ms": 0, "name": "one.one.one.one", "packet_count": 3, "std_dev_rtt_ms": 0 } ], "packets_lost": 0, "packets_sent": 0, "packets_ttl": 0 } ], "target_summary": { "asn": "", "ip": "1.1.1.1", "max_latency_ms": 0.034, "mean_latency_ms": 0.021, "min_latency_ms": 0.014, "name": "1.1.1.1", "packet_count": 3, "std_dev_latency_ms": 0.011269427669584647 }, "traceroute_time_ms": 0 } ], "target": "1.1.1.1" } ] } ``` ## Domain Types ### Traceroute - `type Traceroute struct{…}` - `Colos []TracerouteColo` - `Colo TracerouteColosColo` - `City string` Source colo city. - `Name string` Source colo name. - `Error TracerouteColosError` Errors resulting from collecting traceroute from colo to target. - `const TracerouteColosErrorEmpty TracerouteColosError = ""` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode1 TracerouteColosError = "Could not gather traceroute data: Code 1"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode2 TracerouteColosError = "Could not gather traceroute data: Code 2"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode3 TracerouteColosError = "Could not gather traceroute data: Code 3"` - `const TracerouteColosErrorCouldNotGatherTracerouteDataCode4 TracerouteColosError = "Could not gather traceroute data: Code 4"` - `Hops []TracerouteColosHop` - `Nodes []TracerouteColosHopsNode` An array of node objects. - `ASN string` AS number associated with the node object. - `IP string` IP address of the node. - `Labels []string` Field appears if there is an additional annotation printed when the probe returns. Field also appears when running a GRE+ICMP traceroute to denote which traceroute a node comes from. - `MaxRTTMs float64` Maximum RTT in ms. - `MeanRTTMs float64` Mean RTT in ms. - `MinRTTMs float64` Minimum RTT in ms. - `Name string` Host name of the address, this may be the same as the IP address. - `PacketCount int64` Number of packets with a response from this node. - `StdDevRTTMs float64` Standard deviation of the RTTs in ms. - `PacketsLost int64` Number of packets where no response was received. - `PacketsSent int64` Number of packets sent with specified TTL. - `PacketsTTL int64` The time to live (TTL). - `TargetSummary unknown` Aggregated statistics from all hops about the target. - `TracerouteTimeMs int64` Total time of traceroute in ms. - `Target string` The target hostname, IPv6, or IPv6 address. # Endpoint Healthchecks ## List Endpoint Health Checks `client.Diagnostics.EndpointHealthchecks.List(ctx, query) (*EndpointHealthcheckListResponse, error)` **get** `/accounts/{account_id}/diagnostics/endpoint-healthchecks` List Endpoint Health Checks. ### Parameters - `query EndpointHealthcheckListParams` - `AccountID param.Field[string]` Identifier ### Returns - `type EndpointHealthcheckListResponse struct{…}` - `CheckType EndpointHealthcheckListResponseCheckType` type of check to perform - `const EndpointHealthcheckListResponseCheckTypeIcmp EndpointHealthcheckListResponseCheckType = "icmp"` - `Endpoint string` the IP address of the host to perform checks against - `ID string` UUID. - `Name string` Optional name associated with this check ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) endpointHealthchecks, err := client.Diagnostics.EndpointHealthchecks.List(context.TODO(), diagnostics.EndpointHealthcheckListParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", endpointHealthchecks.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "check_type": "icmp", "endpoint": "203.0.113.1", "id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "name": "My Endpoint" } } ``` ## Endpoint Health Check `client.Diagnostics.EndpointHealthchecks.New(ctx, params) (*EndpointHealthcheckNewResponse, error)` **post** `/accounts/{account_id}/diagnostics/endpoint-healthchecks` Create Endpoint Health Check. ### Parameters - `params EndpointHealthcheckNewParams` - `AccountID param.Field[string]` Path param: Identifier - `EndpointHealthcheck param.Field[EndpointHealthcheck]` Body param ### Returns - `type EndpointHealthcheckNewResponse struct{…}` - `CheckType EndpointHealthcheckNewResponseCheckType` type of check to perform - `const EndpointHealthcheckNewResponseCheckTypeIcmp EndpointHealthcheckNewResponseCheckType = "icmp"` - `Endpoint string` the IP address of the host to perform checks against - `ID string` UUID. - `Name string` Optional name associated with this check ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) endpointHealthcheck, err := client.Diagnostics.EndpointHealthchecks.New(context.TODO(), diagnostics.EndpointHealthcheckNewParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), EndpointHealthcheck: diagnostics.EndpointHealthcheckParam{ CheckType: cloudflare.F(diagnostics.EndpointHealthcheckCheckTypeIcmp), Endpoint: cloudflare.F("203.0.113.1"), }, }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", endpointHealthcheck.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "check_type": "icmp", "endpoint": "203.0.113.1", "id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "name": "My Endpoint" } } ``` ## Get Endpoint Health Check `client.Diagnostics.EndpointHealthchecks.Get(ctx, id, query) (*EndpointHealthcheckGetResponse, error)` **get** `/accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}` Get a single Endpoint Health Check. ### Parameters - `id string` UUID. - `query EndpointHealthcheckGetParams` - `AccountID param.Field[string]` Identifier ### Returns - `type EndpointHealthcheckGetResponse struct{…}` - `CheckType EndpointHealthcheckGetResponseCheckType` type of check to perform - `const EndpointHealthcheckGetResponseCheckTypeIcmp EndpointHealthcheckGetResponseCheckType = "icmp"` - `Endpoint string` the IP address of the host to perform checks against - `ID string` UUID. - `Name string` Optional name associated with this check ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) endpointHealthcheck, err := client.Diagnostics.EndpointHealthchecks.Get( context.TODO(), "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", diagnostics.EndpointHealthcheckGetParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", endpointHealthcheck.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "check_type": "icmp", "endpoint": "203.0.113.1", "id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "name": "My Endpoint" } } ``` ## Delete Endpoint Health Check `client.Diagnostics.EndpointHealthchecks.Delete(ctx, id, body) (*EndpointHealthcheckDeleteResponse, error)` **delete** `/accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}` Delete Endpoint Health Check. ### Parameters - `id string` UUID. - `body EndpointHealthcheckDeleteParams` - `AccountID param.Field[string]` Identifier ### Returns - `type EndpointHealthcheckDeleteResponse struct{…}` - `Errors []EndpointHealthcheckDeleteResponseError` - `Code int64` - `Message string` - `DocumentationURL string` - `Source EndpointHealthcheckDeleteResponseErrorsSource` - `Pointer string` - `Messages []EndpointHealthcheckDeleteResponseMessage` - `Code int64` - `Message string` - `DocumentationURL string` - `Source EndpointHealthcheckDeleteResponseMessagesSource` - `Pointer string` - `Success EndpointHealthcheckDeleteResponseSuccess` Whether the API call was successful. - `const EndpointHealthcheckDeleteResponseSuccessTrue EndpointHealthcheckDeleteResponseSuccess = true` ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) endpointHealthcheck, err := client.Diagnostics.EndpointHealthchecks.Delete( context.TODO(), "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", diagnostics.EndpointHealthcheckDeleteParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", endpointHealthcheck.Errors) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true } ``` ## Update Endpoint Health Check `client.Diagnostics.EndpointHealthchecks.Update(ctx, id, params) (*EndpointHealthcheckUpdateResponse, error)` **put** `/accounts/{account_id}/diagnostics/endpoint-healthchecks/{id}` Update a Endpoint Health Check. ### Parameters - `id string` UUID. - `params EndpointHealthcheckUpdateParams` - `AccountID param.Field[string]` Path param: Identifier - `EndpointHealthcheck param.Field[EndpointHealthcheck]` Body param ### Returns - `type EndpointHealthcheckUpdateResponse struct{…}` - `CheckType EndpointHealthcheckUpdateResponseCheckType` type of check to perform - `const EndpointHealthcheckUpdateResponseCheckTypeIcmp EndpointHealthcheckUpdateResponseCheckType = "icmp"` - `Endpoint string` the IP address of the host to perform checks against - `ID string` UUID. - `Name string` Optional name associated with this check ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/diagnostics" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) endpointHealthcheck, err := client.Diagnostics.EndpointHealthchecks.Update( context.TODO(), "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", diagnostics.EndpointHealthcheckUpdateParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), EndpointHealthcheck: diagnostics.EndpointHealthcheckParam{ CheckType: cloudflare.F(diagnostics.EndpointHealthcheckCheckTypeIcmp), Endpoint: cloudflare.F("203.0.113.1"), }, }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", endpointHealthcheck.ID) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "check_type": "icmp", "endpoint": "203.0.113.1", "id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415", "name": "My Endpoint" } } ``` ## Domain Types ### Endpoint Healthcheck - `type EndpointHealthcheck struct{…}` - `CheckType EndpointHealthcheckCheckType` type of check to perform - `const EndpointHealthcheckCheckTypeIcmp EndpointHealthcheckCheckType = "icmp"` - `Endpoint string` the IP address of the host to perform checks against - `Name string` Optional name associated with this check