# Component Types template

Component types are defined using a YAML manifest with the following structure:

```yaml
# General section
name: function_branin
description: A component type for the branin analytical function

# Parameters section
parameters:
  - name: x1
    domain:
      type: real
      domain: [-5.0, 10.0]
    defaultValue: -5.0
    decimals: 3
    operators:
    FileConfigurator:
      confTemplate: "${value}"

  - name: x2
    domain:
      type: real
      domain: [0.0, 15.0]
    defaultValue: 0.0

  - name: x3
    domain:
      type: categorical
      categories: [cat1,cat2,cat3]
    operators:
    LinuxConfigurator:
      echo:
        file: /sys/class/block/nvme0n1/queue/scheduler

# Metrics section
metrics:
  - name: function_value
```

and properties for the general section:

| Field           | Type   | Value restrictions                                                                                                                                                                                                                             | Is required | Default value | Description                                                                                                                                                                 |
| --------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`          | string | <p>should match the following regexp:</p><p><code>^\[a-zA-Z]\[a-zA-Z0-9\_]\*$</code></p><p>that is only letters, number and underscores, no initial number of underscore</p><p>Notice: this should not match the name of another component</p> | Yes         |               | The name of the component.                                                                                                                                                  |
| `description`   | string |                                                                                                                                                                                                                                                | Yes         |               | A description to characterize the component.                                                                                                                                |
| `componentType` | string | notice: this should match the name of an existing component-type                                                                                                                                                                               | Yes         |               | The name of the component-type that defines the type of the component.                                                                                                      |
| `properties`    | object |                                                                                                                                                                                                                                                | No          |               | General custom properties of the component. These properties can be defined freely and usually have the purpose to expose information useful for configuring the component. |

The parameter section describes the relationship between the component type and already defined parameters with the following properties:

| Field                | Type                  | Value restrictions                                                                                                                                                     | Is required | Default value | Description                                                                             |
| -------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------- | --------------------------------------------------------------------------------------- |
| `name`               | string                | It should match the name of an existing parameter.                                                                                                                     | Yes         | -             | The name of the parameter that should be related to the component-type                  |
| `domain->type`       | string                | {real, integer, categorical}                                                                                                                                           | Yes         | -             | The type of domain to be set for the parameter in relationship with the component-type  |
| `domain->domain`     | array of numbers      | <p>The numbers should be either all integers or real numbers(do not omit the " . ") depending on <code>domain->type</code>.</p><p>The size of the array must be 2.</p> | No          | -             | The bounds to be used to define the domain of the parameter. These bounds are inclusive |
| `domain->categories` | array of strings      |                                                                                                                                                                        | No          | -             | The possible categories that the parameter could possess                                |
| `defaultValue`       | string, integer, real | The value must be included in the domain, for real and integer types and must be a value included in the categories                                                    | Yes         | -             | The default value of the parameter                                                      |
| `decimals`           | integer               | \[0-255]                                                                                                                                                               | No          | 5             | The number of decimal digits rendered for this parameter                                |
| `operators`          | object                | The name and the parameters of a supported [workflow operators](https://docs.akamas.io/akamas-docs/3.3.1/akamas-reference/workflow-operators)                          | Yes         | -             | Specify what operators can be used to apply the parameter                               |

The metric section describes the relationship between the component type and already defined metrics with the following properties:

| Field | Type   | Value restrictions                             | Is required | Default value | Description                                                         |
| ----- | ------ | ---------------------------------------------- | ----------- | ------------- | ------------------------------------------------------------------- |
| name  | string | It should match the name of an existing metric | Yes         |               | The name of the metric that should be related to the component type |

Notice that component type definitions are shared across all the workspaces on the same Akamas installation, and require an account with administrative privileges to manage them.

### Examples

Example of a component for the Cassandra component type:

```yaml
name: Cassandra
description: The Cassandra NoSQL database version 3
parameters:
  - name: cassandra_compactionStrategy
    domain:
      type: categorical
      categories: [A, B]
    defaultValue: A

metrics:
  - name: total_rate
  - name: read_rate
  - name: write_rate
  - name: read_response_time_avg
  - name: read_response_time_p90
  - name: read_response_time_p99
  - name: read_response_time_max
  - name: write_response_time_avg
  - name: write_response_time_p90
  - name: write_response_time_p99
  - name: write_response_time_max
```

Example of a component for the Linux operating component type:

```yaml
name: Linux OS
description: A component type for the Linux Operating System
parameters:
  #CPU Related
  - name: os_cpuSchedMinGranularity
    domain:
      type: integer
      domain: [300000, 30000000]
    defaultValue: 3000000
  - name: os_cpuSchedWakeupGranularity
    domain:
      type: integer
      domain: [400000, 40000000]
    defaultValue: 4000000
  - name: osCpu.schedMigrationCost
    domain:
      type: integer
      domain: [100000, 5000000]
    defaultValue: 500000
  - name: os_CPUSchedChildRunsFirst
    domain:
      type: integer
      domain: [0, 1]
    defaultValue: 0
  - name: os_CPUSchedLatency
    domain:
      type: integer
      domain: [2400000, 240000000]
    defaultValue: 24000000
  - name: os_CPUSchedAutogroupEnabled
    domain:
      type: integer
      domain: [0, 1]
    defaultValue: 1
  - name: os_CPUSchedNrMigrate
    domain:
      type: integer
      domain: [3, 320]
    defaultValue: 32
  #Memory Related
  - name: os_MemorySwappiness
    domain:
      type: integer
      domain: [0, 100]
    defaultValue: 60
  - name: os_MemoryVmVfsCachePressure
    domain:
      type: integer
      domain: [10, 100]
    defaultValue: 100
  - name: os_MemoryVmMinFree
    domain:
      type: integer
      domain: [10240, 1024000]
    defaultValue: 67584
  - name: os_MemoryVmDirtyRatio
    domain:
      type: integer
      domain: [1, 99]
    defaultValue: 10
  - name: os_MemoryTransparentHugepageEnabled
    domain:
      type: categorical
      categories: ['True', 'False']
    defaultValue: 'True'
  - name: os_MemoryTransparentHugepageDefrag
    domain:
      type: categorical
      categories: ['True', 'False']
    defaultValue: 'True'
  - name: os_MemorySwap
    domain:
      type: categorical
      categories: ['True', 'False']
    defaultValue: 'True'
  - name: os_MemoryVmDirtyExpire
    domain:
      type: integer
      domain: [300, 30000]
    defaultValue: 3000
  - name: os_MemoryVmDirtyWriteback
    domain:
      type: integer
      domain: [50, 5000]
    defaultValue: 500

metrics:
  - name: cpu_num
  - name: cpu_util
  - name: mem_util
  - name: load_avg
  - name: swapins
  - name: swapouts
  - name: disk_iops_writes
  - name: disk_iops_reads
  - name: disk_iops_total
  - name: disk_await_worst
  - name: proc_blocked
  - name: context_switch
  - name: tcp_retrans
  - name: tcp_tozerowin
  - name: net_band_rx_bits
  - name: net_band_tx_bits
  - name: network_in_byte_rate
  - name: network_out_byte_rate
  - name: mem_fault_minor
  - name: mem_fault_major
  - name: mem_active_file
  - name: mem_active_anon
  - name: mem_inactive_file
  - name: mem_inactive_anon
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.akamas.io/akamas-docs/3.3.1/akamas-reference/construct-templates/component-types-template.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
