Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
47 changes: 38 additions & 9 deletions .github/workflows/claude-documentation-reviewer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,15 @@ jobs:

2. Review ONLY the added or modified lines from the diff for issues per your instructions. Do not report issues on lines that were not changed.

3. You MUST write your complete review to `/tmp/review-summary.md` — always, even if there are no issues. Use this exact structure — issues organized by file with a subheading for each file, in the format from your instructions:
3. You MUST write your complete review to `/tmp/review-summary.md` — always, even if there are no issues. Use this exact structure:

## Issues in PR changes
<issues organized by file with subheadings, in the format from your instructions, or "None." if there are none>

**path/to/file.md**

Line N: description of issue and fix.

(Repeat for each file and issue. Write "None." if there are no issues.)

4. Fix ALL issues directly in the files using the Write and Edit tools. Do not post a PR comment. Do not commit or push.

Expand Down Expand Up @@ -257,21 +262,37 @@ jobs:
return valid

def normalize_review_body(body):
"""Normalize issue formatting to single-line **Line N:** entries."""
"""Normalize issue formatting to plain-text Line N: entries under **bold** file headers."""
src = body.split('\n')
result = []
i = 0
while i < len(src):
line = src[i]

# Convert heading format: ### Line N: ... → **Line N:** ...
m = re.match(r'^#{1,6}\s+(Line \d+):(.+)$', line)
# Convert file path heading: ### path/to/file.md → **path/to/file.md**
m = re.match(r'^#{1,6}\s+(\S+\.md)\s*$', line)
if m:
result.append(f'**{m.group(1)}**')
i += 1
continue

# Convert line heading: ### Line N: description → Line N: description
m = re.match(r'^#{1,6}\s+(Line \d+):\s*(.*)$', line)
if m:
result.append(f'**{m.group(1)}:**{m.group(2)}')
desc = m.group(2).strip()
result.append(f'{m.group(1)}: {desc}' if desc else f'{m.group(1)}:')
i += 1
continue

# Convert bold-closed format: **Line N: label.** + continuation → **Line N:** label. continuation.
# Convert bold line ref (colon outside stars): **Line N:** description → Line N: description
m = re.match(r'^\*\*(Line \d+):\*\*\s*(.*)$', line)
if m:
desc = m.group(2).strip()
result.append(f'{m.group(1)}: {desc}' if desc else f'{m.group(1)}:')
i += 1
continue

# Convert bold-closed line ref: **Line N: label.** + sub-bullets/continuation → Line N: label. continuation.
m = re.match(r'^\*\*(Line \d+):\s*(.*?)\*\*\s*$', line)
if m:
lineref = m.group(1)
Expand All @@ -292,7 +313,15 @@ jobs:
else:
break
desc = '. '.join(parts).rstrip('.')
result.append(f'**{lineref}:** {desc}.' if desc else f'**{lineref}:**')
result.append(f'{lineref}: {desc}.' if desc else f'{lineref}:')
continue

# Convert bullet line ref: - Line N: description → Line N: description
m = re.match(r'^[-*]\s+(Line \d+):\s*(.*)$', line)
if m:
desc = m.group(2).strip()
result.append(f'{m.group(1)}: {desc}' if desc else f'{m.group(1)}:')
i += 1
continue

# Collapse numbered list items with sub-bullets (e.g. 1. **Issue title**: desc\n - Current: ...\n - Fix: ...)
Expand All @@ -309,7 +338,7 @@ jobs:
parts.append(sub.strip().rstrip('.'))
i += 1
desc_text = '. '.join(parts).rstrip('.')
result.append(f'**{title}.** {desc_text}.' if desc_text else f'**{title}.**')
result.append(f'{title}: {desc_text}.' if desc_text else f'{title}.')
continue

result.append(line)
Expand Down
63 changes: 32 additions & 31 deletions docs/passwordsecure/9.2/msp_system.md
Original file line number Diff line number Diff line change
@@ -1,58 +1,59 @@
---
title: "MSP System"
description: "MSP System"
title: "MSP system"
description: "Minimum hardware requirements for MSP system deployments"
sidebar_position: 30
---

# MSP System
# MSP system

To ensure optimal operation, we recommend that the following hardware resources are made available:
Ensure the following hardware resources are available for optimal MSP system operation.

## Microsoft SQL Server

The following system requirements are the minimum system requirements and should manage around 10
customers with less than 20 users each.
These are the minimum system requirements for supporting approximately 10 customers with fewer than 20 users each.

- Windows Server 2016 (or newer)
- MSSQL Server 2014 (or newer)
- 4 CPU’s
- Windows Server 2016 or later
- MSSQL Server 2014 or later
- 4 CPUs
- 16 GB RAM
- min. 100 GB HDD
- 100 GB HDD

**CAUTION:** Please note, that using a SQL Server with Express edition is not recommended because of
diverse limitations there.
:::warning
Using SQL Server Express edition isn't recommended because of its limitations.
:::

If your customer's count is growing over time, you should add every 200 users a minimum of at least:
Add the following resources for every additional 200 users:

- 2 CPU’s
- 2 CPUs
- 8 GB RAM

## Application Server
## Application server

The following system requirements are the minimum system requirements and should manage around 10
customers with 20 users each.
These are the minimum system requirements for supporting approximately 10 customers with 20 users each.

- Windows Server 2016 (or newer)
- 4 CPU’s
- Windows Server 2016 or later
- 4 CPUs
- 16 GB RAM
- min. 50 GB HDD
- 50 GB HDD
- .NET Framework 4.8

If your customer's count is growing over time, you should add every 200 users a minimum of at least:
Add the following resources for every additional 200 users:

- 1 CPU
- 4 GB RAM

RECOMMENDED: Currently, we suggest you use an application server to handle a max of about 100
customers. So if you reach 100 customers, you should set up a second Application Server or use some
sort of load balancing between the application servers.
:::tip
Netwrix recommends limiting each application server to a maximum of approximately 100 customers. If you reach 100 customers, set up a second application server or configure load balancing between your application servers.
:::

**CAUTION:** Every additional 1000 users an additional Web-Endpoint - incl. loadbalancing - is
recommended
:::warning
For every additional 1,000 users, add an additional web endpoint with load balancing.
:::

**CAUTION:** Every additional 100 customers/1000 users an additional Application Server - incl.
loadbalancing - is recommended.
:::warning
For every additional 100 customers or 1,000 users, add an additional application server with load balancing.
:::

NOTE: Please note that individual variables - like the number of passwords per user - will affect
performance. Especially for MSP-Systems it is required to monitor performance continuously, and add
additional resources on demand.
:::note
Individual variables—such as the number of passwords per user—affect performance. For MSP systems, monitor performance continuously and add resources as needed.
:::
Loading