Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add reference generator builds reference from the task graphs #63

Open
wants to merge 23 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9a33c6e
Adding document generator for tasks
kyasbal Feb 8, 2025
a52b40a
Adding document generator for inspection types
kyasbal Feb 8, 2025
e54fa5a
Add generator for timeline reference
kyasbal Feb 9, 2025
e5e728f
Added query info on feature document
kyasbal Feb 10, 2025
9bca5a8
Use shorter ID for anchoring headers for feature tasks
kyasbal Feb 10, 2025
65868c9
Add dependent form parameters in feature document
kyasbal Feb 10, 2025
9249d77
Added TargetLogType() on Parser interface
kyasbal Feb 10, 2025
12fa71e
Add link to timeline output from feature
kyasbal Feb 10, 2025
bcb7cba
Removed log type related document
kyasbal Feb 10, 2025
dded09e
Add timeline references
kyasbal Feb 10, 2025
66317b9
Added headers of references
kyasbal Feb 10, 2025
a0144a0
Fix sample queries
kyasbal Feb 10, 2025
add1225
Added missing elements in parent relationships
kyasbal Feb 10, 2025
7e2d12e
Added form template
kyasbal Feb 10, 2025
120d35d
Fix anchor links
kyasbal Feb 10, 2025
87b467b
Added reverse link to inspection type from features
kyasbal Feb 11, 2025
fea1873
Moved folders
kyasbal Feb 11, 2025
93d6262
Fixed descriptions of feature tasks
kyasbal Feb 11, 2025
f9a203a
Added comment on the type of document model for feature tasks
kyasbal Feb 11, 2025
1b7b4e8
Added comments in types used for generating document model for relati…
kyasbal Feb 11, 2025
2c0c981
Add comments for document model types for form references
kyasbal Feb 11, 2025
62485df
Refactor document related types for review
kyasbal Feb 11, 2025
3621de6
Fixed composer query generator to generate a sample query for document
kyasbal Feb 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions cmd/reference-generator/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// Copyright 2025 Google LLC
//
// Licensed 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.

package main

// cmd/reference-generator/main.go
// Generates KHI reference documents from the task graph or constants defined in code base.

import (
"fmt"
"log/slog"
"os"

"github.com/GoogleCloudPlatform/khi/pkg/document/generator"
"github.com/GoogleCloudPlatform/khi/pkg/document/model"
"github.com/GoogleCloudPlatform/khi/pkg/inspection"
"github.com/GoogleCloudPlatform/khi/pkg/inspection/common"
"github.com/GoogleCloudPlatform/khi/pkg/source/gcp"
)

var taskSetRegistrer []inspection.PrepareInspectionServerFunc = make([]inspection.PrepareInspectionServerFunc, 0)

// fatal logs the error and exits if err is not nil.
func fatal(err error, msg string) {
if err != nil {
slog.Error(fmt.Sprintf("%s: %v", msg, err))
os.Exit(1)
}
}

func init() {
taskSetRegistrer = append(taskSetRegistrer, common.PrepareInspectionServer)
taskSetRegistrer = append(taskSetRegistrer, gcp.PrepareInspectionServer)
}

func main() {
inspectionServer, err := inspection.NewServer()
if err != nil {
slog.Error(fmt.Sprintf("Failed to construct the inspection server due to unexpected error\n%v", err))
}

for i, taskSetRegistrer := range taskSetRegistrer {
err = taskSetRegistrer(inspectionServer)
if err != nil {
slog.Error(fmt.Sprintf("Failed to call initialize calls for taskSetRegistrer(#%d)\n%v", i, err))
}
}

generator, err := generator.NewDocumentGeneratorFromTemplateFileGlob("./docs/template/reference/*.template.md")
fatal(err, "failed to load template files")

// Generate the reference for inspection types
inspectionTypeDocumentModel := model.GetInspectionTypeDocumentModel(inspectionServer)
err = generator.GenerateDocument("./docs/en/reference/inspection-type.md", "inspection-type-template", inspectionTypeDocumentModel, false)
fatal(err, "failed to generate inspection type document")

featureDocumentModel, err := model.GetFeatureDocumentModel(inspectionServer)
fatal(err, "failed to generate feature document model")
err = generator.GenerateDocument("./docs/en/reference/features.md", "feature-template", featureDocumentModel, false)
fatal(err, "failed to generate feature document")

formDocumentModel, err := model.GetFormDocumentModel(inspectionServer)
fatal(err, "failed to generate form document model")
err = generator.GenerateDocument("./docs/en/reference/forms.md", "form-template", formDocumentModel, false)
fatal(err, "failed to generate form document")

relationshipDocumentModel := model.GetRelationshipDocumentModel()
err = generator.GenerateDocument("./docs/en/reference/relationships.md", "relationship-template", relationshipDocumentModel, false)
fatal(err, "failed to generate relationship document")
}
Binary file added docs/en/images/reference/default-timeline.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
813 changes: 813 additions & 0 deletions docs/en/reference/features.md

Large diffs are not rendered by default.

226 changes: 226 additions & 0 deletions docs/en/reference/forms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
# Forms

> [!WARNING]
> 🚧 This reference document is under construction. 🚧

<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/project-id -->
## Project ID

The project ID containing logs of the cluster to query
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/project-id -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/project-id -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Kubernetes Event Logs](./features.md#kubernetes-event-logs)
* [Kubernetes Node Logs](./features.md#kubernetes-node-logs)
* [Kubernetes container logs](./features.md#kubernetes-container-logs)
* [GKE Audit logs](./features.md#gke-audit-logs)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [MultiCloud API logs](./features.md#multicloud-api-logs)
* [Autoscaler Logs](./features.md#autoscaler-logs)
* [OnPrem API logs](./features.md#onprem-api-logs)
* [Kubernetes Control plane component logs](./features.md#kubernetes-control-plane-component-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
* [(Alpha) Composer / Airflow Scheduler](./features.md#alpha-composer--airflow-scheduler)
* [(Alpha) Cloud Composer / Airflow Worker](./features.md#alpha-cloud-composer--airflow-worker)
* [(Alpha) Composer / Airflow DagProcessorManager](./features.md#alpha-composer--airflow-dagprocessormanager)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/project-id -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/cluster-name -->
## Cluster name

The cluster name to gather logs.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/cluster-name -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/cluster-name -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Kubernetes Event Logs](./features.md#kubernetes-event-logs)
* [Kubernetes Node Logs](./features.md#kubernetes-node-logs)
* [Kubernetes container logs](./features.md#kubernetes-container-logs)
* [GKE Audit logs](./features.md#gke-audit-logs)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [MultiCloud API logs](./features.md#multicloud-api-logs)
* [Autoscaler Logs](./features.md#autoscaler-logs)
* [OnPrem API logs](./features.md#onprem-api-logs)
* [Kubernetes Control plane component logs](./features.md#kubernetes-control-plane-component-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/cluster-name -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/duration -->
## Duration

The duration of time range to gather logs. Supported time units are `h`,`m` or `s`. (Example: `3h30m`)
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/duration -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/duration -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Kubernetes Event Logs](./features.md#kubernetes-event-logs)
* [Kubernetes Node Logs](./features.md#kubernetes-node-logs)
* [Kubernetes container logs](./features.md#kubernetes-container-logs)
* [GKE Audit logs](./features.md#gke-audit-logs)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [MultiCloud API logs](./features.md#multicloud-api-logs)
* [Autoscaler Logs](./features.md#autoscaler-logs)
* [OnPrem API logs](./features.md#onprem-api-logs)
* [Kubernetes Control plane component logs](./features.md#kubernetes-control-plane-component-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
* [(Alpha) Composer / Airflow Scheduler](./features.md#alpha-composer--airflow-scheduler)
* [(Alpha) Cloud Composer / Airflow Worker](./features.md#alpha-cloud-composer--airflow-worker)
* [(Alpha) Composer / Airflow DagProcessorManager](./features.md#alpha-composer--airflow-dagprocessormanager)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/duration -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/end-time -->
## End time

The endtime of the time range to gather logs. The start time of the time range will be this endtime subtracted with the duration parameter.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/end-time -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/end-time -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Kubernetes Event Logs](./features.md#kubernetes-event-logs)
* [Kubernetes Node Logs](./features.md#kubernetes-node-logs)
* [Kubernetes container logs](./features.md#kubernetes-container-logs)
* [GKE Audit logs](./features.md#gke-audit-logs)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [MultiCloud API logs](./features.md#multicloud-api-logs)
* [Autoscaler Logs](./features.md#autoscaler-logs)
* [OnPrem API logs](./features.md#onprem-api-logs)
* [Kubernetes Control plane component logs](./features.md#kubernetes-control-plane-component-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
* [(Alpha) Composer / Airflow Scheduler](./features.md#alpha-composer--airflow-scheduler)
* [(Alpha) Cloud Composer / Airflow Worker](./features.md#alpha-cloud-composer--airflow-worker)
* [(Alpha) Composer / Airflow DagProcessorManager](./features.md#alpha-composer--airflow-dagprocessormanager)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/end-time -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/kinds -->
## Kind

The kinds of resources to gather logs. `@default` is a alias of set of kinds that frequently queried. Specify `@any` to query every kinds of resources
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/kinds -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/kinds -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/kinds -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/location -->
## Location


<!-- END GENERATED PART: form-element-header-cloud.google.com/input/location -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/location -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [(Alpha) Composer / Airflow Scheduler](./features.md#alpha-composer--airflow-scheduler)
* [(Alpha) Cloud Composer / Airflow Worker](./features.md#alpha-cloud-composer--airflow-worker)
* [(Alpha) Composer / Airflow DagProcessorManager](./features.md#alpha-composer--airflow-dagprocessormanager)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/location -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/namespaces -->
## Namespaces

The namespace of resources to gather logs. Specify `@all_cluster_scoped` to gather logs for all non-namespaced resources. Specify `@all_namespaced` to gather logs for all namespaced resources.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/namespaces -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/namespaces -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Audit Log](./features.md#kubernetes-audit-log)
* [Kubernetes Event Logs](./features.md#kubernetes-event-logs)
* [Compute API Logs](./features.md#compute-api-logs)
* [GCE Network Logs](./features.md#gce-network-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/namespaces -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/node-name-filter -->
## Node names

A space-separated list of node name substrings used to collect node-related logs. If left blank, KHI gathers logs from all nodes in the cluster.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/node-name-filter -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/node-name-filter -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Node Logs](./features.md#kubernetes-node-logs)
* [Node serial port logs](./features.md#node-serial-port-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/node-name-filter -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/container-query-namespaces -->
## Namespaces(Container logs)

The namespace of Pods to gather container logs. Specify `@managed` to gather logs of system components.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/container-query-namespaces -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/container-query-namespaces -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes container logs](./features.md#kubernetes-container-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/container-query-namespaces -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/container-query-podnames -->
## Pod names(Container logs)

The substring of Pod name to gather container logs. Specify `@any` to gather logs of all pods.
<!-- END GENERATED PART: form-element-header-cloud.google.com/input/container-query-podnames -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/container-query-podnames -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes container logs](./features.md#kubernetes-container-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/container-query-podnames -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/component-names -->
## Control plane component names


<!-- END GENERATED PART: form-element-header-cloud.google.com/input/component-names -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/component-names -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [Kubernetes Control plane component logs](./features.md#kubernetes-control-plane-component-logs)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/component-names -->
<!-- BEGIN GENERATED PART: form-element-header-cloud.google.com/input/composer/environment_name -->
## Composer Environment Name


<!-- END GENERATED PART: form-element-header-cloud.google.com/input/composer/environment_name -->
<!-- BEGIN GENERATED PART: form-used-feature-cloud.google.com/input/composer/environment_name -->
### Features using this parameter

Following feature tasks are depending on this parameter:


* [(Alpha) Composer / Airflow Scheduler](./features.md#alpha-composer--airflow-scheduler)
* [(Alpha) Cloud Composer / Airflow Worker](./features.md#alpha-cloud-composer--airflow-worker)
* [(Alpha) Composer / Airflow DagProcessorManager](./features.md#alpha-composer--airflow-dagprocessormanager)
<!-- END GENERATED PART: form-used-feature-cloud.google.com/input/composer/environment_name -->
Loading
Loading