# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

rules:
  - name: network-profiling-slow-trace
    layer: MESH_DP
    dsl: |
      filter {
        json{
        }
        extractor{
          if (tag("LOG_KIND") == "NET_PROFILING_SAMPLED_TRACE") {
            sampledTrace {
              latency parsed.latency as Long
              uri parsed.uri as String
              reason parsed.reason as String

              if (parsed.client_process.process_id as String != "") {
                processId parsed.client_process.process_id as String
              } else if (parsed.client_process.local as Boolean) {
                processId ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, parsed.serviceInstance as String) as String
              } else {
                processId ProcessRegistry.generateVirtualRemoteProcess(parsed.service as String, parsed.serviceInstance as String, parsed.client_process.address as String) as String
              }

              if (parsed.server_process.process_id as String != "") {
                destProcessId parsed.server_process.process_id as String
              } else if (parsed.server_process.local as Boolean) {
                destProcessId ProcessRegistry.generateVirtualLocalProcess(parsed.service as String, parsed.serviceInstance as String) as String
              } else {
                destProcessId ProcessRegistry.generateVirtualRemoteProcess(parsed.service as String, parsed.serviceInstance as String, parsed.server_process.address as String) as String
              }

              detectPoint parsed.detect_point as String

              if (parsed.component as String == "http" && parsed.ssl as Boolean) {
                componentId 129
              } else if (parsed.component as String == "http") {
                componentId 49
              } else if (parsed.ssl as Boolean) {
                componentId 130
              } else {
                componentId 110
              }
            }
          }
        }
      }