# 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.

catalog:
    - name: Welcome
      path: /readme
    - name: Concepts and Designs
      catalog:
        - name: What is SkyWalking Rover?
          catalog:
            - name: Overview and Core Concepts
              path: /en/concepts-and-designs/overview
        - name: Design
          catalog:
            - name: Module Design
              path: /en/concepts-and-designs/module_design
            - name: Project Structure
              path: /en/concepts-and-designs/project_structue
    - name: Setup
      catalog:
        - name: Overview
          path: /en/setup/overview
        - name: Configuration
          catalog:
            - name: Logger Module
              path: /en/setup/configuration/logger
            - name: Core Module
              path: /en/setup/configuration/core
            - name: Process Discovery Module
              catalog:
                - name: Overview
                  path: /en/setup/configuration/process_discovery/overview
                - name: Linux Process Scanner
                  path: /en/setup/configuration/process_discovery/scanner
                - name: Kubernetes Process Detector
                  path: /en/setup/configuration/process_discovery/kubernetes
            - name: Profiling Module
              path: /en/setup/configuration/profiling
        - name: Examples
          catalog:
            - name: Deploy
              catalog:
                - name: Deploy on Linux
                  path: /en/setup/examples/deploy/linux/readme
            - name: Use Cases
              catalog:
                - name: Profiling a Golang/C/C++/Rust service on Linux
                  path: /en/setup/examples/cases/profiling-process/readme
                - name: Detect Process by Agent Sensor
                  path: /en/setup/examples/cases/agent-sensor/readme
                - name: Detect Process in Kubernetes Environemnt
                  path: /en/setup/examples/cases/kubernetes-process/readme
    - name: Guides
      catalog:
        - name: Contribution
          catalog:
            - name: How to Write a Module
              path: /en/guides/contribution/how-to-write-module
            - name: How to Release
              path: /en/guides/contribution/how-to-release
        - name: Compile
          catalog:
            - name: How to compile SkyWalking Rover
              path: /en/guides/compile/how-to-compile
