admingit 2 years ago
parent d1d852b671
commit 0e851f4451

@ -0,0 +1,6 @@
[default]
python.version = {default|python|python2|python3}
* For Splunk 8.0.x and Python scripts only, selects which Python version to use.
* Either "default" or "python" select the system-wide default Python version.
* Optional.
* Default: not set; uses the system-wide Python version.

@ -0,0 +1,33 @@
######################################################
#
# Splunk_TA_windows_admon
# Custom: This is a sub-TA from the Splunk_TA_windows
# application, that consist of only the admon input that
# collects AD object and Attributes data from the
# Active Directory environment. Note, it is recommended
# to have this input enabled on Only one Domain Controller
# or Windows system per AD Domain.
# This input includes a single predefined input, [admon://default]
# with the additional setting of baseline = 1 which is required
# by the MS Windows AD Objects application. It
# is provided by the MS Windows AD Objects application.
# Copyright (C) 2020 Splunk Inc. All Rights Reserved.
#
######################################################
[install]
is_configured = false
state = enabled
build = 1
[ui]
is_visible = false
label = admon Input from the Splunk Add-on for Microsoft Windows TA
[launcher]
author = Splunk, Inc. Custom Splunkworks
version = 8.0.0
description = Splunk Add-on for Microsoft Windows with specific predefined admon input to collect Active Directory Object and Attributes data.
[package]
id = Splunk_TA_windows_admon

@ -0,0 +1,14 @@
# Copyright (C) 2020 Splunk Inc. All Rights Reserved.
# Custom TA Used by the MS Windows AD Objects application
# Uses the Splunk_TA_windows TA
# DO NOT EDIT THIS FILE!
# Please make all changes to files in $SPLUNK_HOME/etc/apps/Splunk_TA_windows/local.
# To make changes, copy the section/stanza you want to change from $SPLUNK_HOME/etc/apps/Splunk_TA_windows_admon/default
# into $SPLUNK_HOME/etc/apps/Splunk_TA_windows_admon/local and edit there.
#
[admon://default]
disabled = 1
monitorSubtree = 1
baseline = 1
#targetDc = enter hostname for a Domain Controller

@ -0,0 +1,34 @@
# MS Windows AD Objects provided pre-defined - admon input
# - Custom Input Settings from the Splunk_TA_windows TA
#
# ---------------------------------------------------------------------------------------
# NOTE:
# *** This inputs.conf only contains the admon input, and should ONLY be placed
# on one Windows System per AD Domain, preferably on a Domain Controller,
# or it can be a member server. IF use a non-Domain Controller system, then the
# SplunkForwarder service needs to be running as an AD Account with read access
# to the target domain, and it is recommended to add the setting of targetDc
# with the value as an AD Domain Controllers Hostname.
# - For best performance running it from the local domain controller is the
# best option.
# ---------------------------------------------------------------------------------------
#
# Special Notes:
# - **Important:
# - The setting index=... has been added to the admon enabled input.
# Make sure you have created the msad index or you can specify a different index.
# - A baseline is create ONLY during the first iteration of data collection. So if you aren't seeing
# any sourcetype=ActiveDirectory admonEventType="Sync" data returned in your splunk search view, then:
# - 1. Stop the splunk Forwarder Service
# - 2. Using Windows File Explorer go to
# /SplunkUniversalForwarder/var/lib/splunk/persisstantstorage/AdMon directory.
# - 3. Delete all of the .ini's from this directory (ie default.ini, etc)
# - 4. Start the Splunk Forwarder Service
# ---------------------------------------------------------------------------------------
[admon://default]
disabled = 0
monitorSubtree = 1
baseline = 1
index=msad
#targetDc = enter hostname for a Domain Controller

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@ -0,0 +1,6 @@
[default]
python.version = {default|python|python2|python3}
* For Splunk 8.0.x and Python scripts only, selects which Python version to use.
* Either "default" or "python" select the system-wide default Python version.
* Optional.
* Default: not set; uses the system-wide Python version.

@ -0,0 +1,89 @@
<#
.SYNOPSIS
& .\Invoke-MonitoredScript.ps1 "MyScript.ps1"
.DESCRIPTION
Outputs additional Splunk events related to the running and
errors in the script.
#>
[CmdletBinding()]
param(
#Command to execute.
[Parameter(Position=0, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string] $Command,
# Splunk Sourcetype Prefix for generated events
[Parameter()]
[ValidateNotNull()]
[string] $SourceTypePrefix="Powershell:",
# Maximum number of errors to convert into events
[Parameter()]
[ValidateRange(0, 100)]
[int] $MaxErrorCount
)
$WrappedScriptExecutionSummary= New-Object -TypeName PSObject -Property (
[ordered]@{
SplunkSourceType="$($SourceTypePrefix)ScriptExecutionSummary";
Identity=[guid]::NewGuid().ToString();
InvocationLine=$MyInvocation.Line;
TerminatingError=$false; ErrorCount=0; Elapsed=""
})
$originalLocation = Get-Location
try
{
Set-Location (Split-Path -Parent $MyInvocation.MyCommand.Definition)
$ScriptStopWatch = [System.Diagnostics.Stopwatch]::StartNew()
$Error.Clear()
Invoke-Expression $Command
}
catch
{
$WrappedScriptExecutionSummary.TerminatingError = $true;
}
finally
{
Set-Location $originalLocation
$WrappedScriptExecutionSummary.Elapsed = $ScriptStopWatch.Elapsed.ToString("hh\:mm\:ss\.fff")
$WrappedScriptExecutionSummary.ErrorCount = $Error.Count
if ($Error.Count -gt 0) {
$ei = $Error.Count - 1
if ($PSBoundParameters.ContainsKey('MaxErrorCount')) {
if ($MaxErrorCount -lt $Error.Count) {
$ei = $MaxErrorCount - 1
}
# Always emit terminating errors
if ($ei -eq -1 -and $WrappedScriptExecutionSummary.TerminatingError) {
$ei = 1
}
}
for(; $ei -ge 0; $ei--) {
$errorRecord = New-Object -TypeName PSObject -Property (
[ordered]@{
SplunkSourceType="$($SourceTypePrefix)ScriptExecutionErrorRecord";
ParentIdentity=$WrappedScriptExecutionSummary.Identity;
ErrorIndex=$ei;
ErrorMessage=$Error[$ei].ToString();
PositionMessage=$Error[$ei].InvocationInfo.PositionMessage;
CategoryInfo=$Error[$ei].CategoryInfo.ToString();
FullyQualifiedErrorId=$Error[$ei].FullyQualifiedErrorId
})
if ($Error[$ei].Exception -ne $null) {
Add-Member -InputObject $errorRecord -MemberType NoteProperty -Name Exception -Value $Error[$ei].Exception.ToString()
if ($Error[$ei].Exception.InnerException -ne $null) {
Add-Member -InputObject $errorRecord -MemberType NoteProperty -Name InnerException -Value $Error[$ei].Exception.InnerException.ToString()
}
}
Write-Output $errorRecord
}
}
Write-Output $WrappedScriptExecutionSummary
}

@ -0,0 +1,111 @@
import logging
import logging.handlers as handlers
import os.path as op
import os
import time
try:
from splunk.clilib.bundle_paths import make_splunkhome_path
except ImportError:
from splunk.appserver.mrsparkle.lib.util import make_splunkhome_path
logging.Formatter.converter = time.gmtime
__LOG_FORMAT__ = "%(asctime)s +0000 log_level=%(levelname)s, pid=%(process)d, " \
"tid=%(threadName)s, file=%(filename)s, " \
"func_name=%(funcName)s, code_line_no=%(lineno)d | %(message)s"
class Log(object):
def __init__(self, namespace=None, default_level=logging.INFO):
self._loggers = {}
self._default_level = default_level
if namespace is None:
namespace = self._get_appname_from_path(op.abspath(__file__))
if namespace:
namespace = namespace.lower()
self._namespace = namespace
def get_logger(self, name, level=None,
maxBytes=25000000, backupCount=5):
"""
Set up a default logger.
:param name: The log file name.
:param level: The logging level.
:param maxBytes: The maximum log file size before rollover.
:param backupCount: The number of log files to retain.
"""
# Strip ".py" from the log file name if auto-generated by a script.
if level is None:
level = self._default_level
name = self._get_log_name(name)
if name in self._loggers:
return self._loggers[name]
logger = logging.getLogger(name)
logfile = make_splunkhome_path(["var", "log", "splunk", name])
handler_exists = any(
[True for h in logger.handlers if h.baseFilename == logfile])
if not handler_exists:
file_handler = handlers.RotatingFileHandler(
logfile, mode="a", maxBytes=maxBytes, backupCount=backupCount)
formatter = logging.Formatter(__LOG_FORMAT__ )
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.setLevel(level)
logger.propagate = False
self._loggers[name] = logger
return logger
def set_level(self, level, name=None):
"""
Change the log level of the logging
:param level: the level of the logging to be setLevel
:param name: the name of the logging to set, in case it is not set,
all the loggers will be affected
"""
if name is not None:
name = self._get_log_name(name)
logger = self._loggers.get(name)
if logger is not None:
logger.setLevel(level)
else:
self._default_level = level
for logger in self._loggers.values():
logger.setLevel(level)
def _get_log_name(self, name):
if name.endswith(".py"):
name = name.replace(".py", "")
if self._namespace:
name = "{}_{}.log".format(self._namespace, name)
else:
name = "{}.log" .format(name)
return name
def _get_appname_from_path(self, absolute_path):
absolute_path = op.normpath(absolute_path)
parts = absolute_path.split(os.path.sep)
parts.reverse()
for key in ("apps", "slave-apps", "master-apps"):
try:
idx = parts.index(key)
except ValueError:
continue
else:
try:
if parts[idx + 1] == "etc":
return parts[idx - 1]
except IndexError:
pass
continue
#return None
return "-"

@ -0,0 +1,5 @@
@echo off
REM --------------------------------------------------------
REM Copyright (C) 2020 Splunk Inc. All Rights Reserved.
REM --------------------------------------------------------
netsh interface ip show address

@ -0,0 +1,58 @@
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
$ServerName = $env:ComputerName
$DomainController = Get-ADDomainController -Identity $ServerName
$Domain = Get-ADDomain -Identity $DomainController.Domain
$Forest = Get-ADForest -Identity $DomainController.Forest
$ReplicationSite = Get-ADReplicationSite -Identity $DomainController.Site
$Computer = Get-ADComputer -Identity $ServerName -Properties *
$RootDSE = Get-ADRootDSE -Server $ServerName
$RequiredServices = @( "ntfrs", "dfsr", "netlogon", "kdc", "w32time", "ismserv" )
$ISTG = ($DomainController.NTDSSettingsObjectDN -eq $ReplicationSite.InterSiteTopologyGenerator)
$SYSVOL = (Get-SMBShare SYSVOL -ErrorAction SilentlyContinue)
Try {
$DnsRegister = [System.Net.Dns]::GetHostByName($DomainController.HostName)
} Catch {
# The Catch will set $DnsRegister = $null if the GetHostByName fails for some reason
}
$SchemaVersion= Get-ADObject -Filter * -SearchScope Base -Properties objectVersion `
-SearchBase $RootDSE.schemaNamingContext
$DCWeight = (Get-Item "HKLM:System\CurrentControlSet\Services\Netlogon\Parameters").GetValue("LdapSrvWeight", $null)
if (!$DCWeight -or $DCWeight -eq $null -or $DCWeight -eq "") {
$DCWeight = 100
}
$FSMORoles = ($DomainController | Select -Expand OperationMasterRoles | %{ $_.ToString().Replace("Master","") } )
$SvcRunning = @(Get-Service $RequiredServices | ? Status -eq "Running" | select -expand Name)
$SvcStopped = @(Get-Service $RequiredServices | ? Status -ne "Running" | select -expand Name)
$ProcsOK = (($SvcStopped.Count -eq 0) -or ($SvcStopped.Count -eq 1 -and ($SvcStopped[0] -eq "ntfrs" -or $SvcStopped[0] -eq "dfsr")))
New-Object PSObject -Property @{
Server = $DomainController.Name
DomainDNSName = $DomainController.Domain
DomainNetBIOSName = $Domain.NetBIOSName
DomainLevel = $Domain.DomainMode
Site = $DomainController.Site
ForestName = $DomainController.Forest
ForestLevel = $Forest.ForestMode
Created = $Computer.whenCreated
Changed = $Computer.whenChanged
GlobalCatalog = $DomainController.IsGlobalCatalog
RODC = $DomainController.IsReadOnly
Enabled = $DomainController.Enabled
HighestUSN = $RootDSE.highestCommittedUSN
SchemaVersion = $SchemaVersion.objectVersion
DCWeight = $DCWeight
IsIntersiteTopologyGenerator = $ISTG
OperatingSystem = $DomainController.OperatingSystem
ServicePack = $DomainController.OperatingSystemServicePack
OSVersion = $DomainController.OperatingSystemVersion
FSMORoles = $FSMORoles -join " "
ServicesRunning = $SvcRunning -join ","
ServicesNotRunning = $SvcStopped -join ","
ProcsOK = $ProcsOK
SYSVOLShare = ($SYSVOL -ne $null)
DNSRegister = ($DnsRegister -ne $null)
}

@ -0,0 +1,17 @@
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
Get-ADReplicationPartnerMetaData -Target $env:ComputerName -PartnerType Inbound -Partition * | %{
$src_host = Get-ADObject -Filter * -SearchBase $_.Partner.Replace("CN=NTDS Settings,","") `
-SearchScope Base -Properties dNSHostName
New-Object PSObject -Property @{
LastAttemptedSync = $_.LastReplicationAttempt
LastSuccessfulSync = $_.LastReplicationSuccess
type = "ReplicationEvent"
usn = $_.LastChangeUsn
src_host = $src_host.dNSHostName
Result = $_.LastReplicationResult
transport = $_.IntersiteTransportType
naming_context = $_.Partition
}
}

@ -0,0 +1,74 @@
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
#
# Get the Information about this site
#
$ServerName = $env:ComputerName
$DC = Get-ADDomainController -Identity $ServerName
$Site = Get-ADReplicationSite -Identity $DC.Site
$Object = Get-ADObject -Filter * -SearchScope base -Properties * `
-SearchBase $Site.DistinguishedName
$Location = if ($Object.location -eq $null) { "" } else { $Object.location }
$ISTG = Get-ADDomainController -Filter `
'NTDSSettingsObjectDN -eq $Site.IntersiteTopologyGenerator'
$SiteLinks = Get-ADReplicationSiteLink -Filter 'SitesIncluded -eq $Site' -Properties *
$AdjacentSites = ($SiteLinks | Select -Expand SitesIncluded | `
Where-Object { $_ -ne $Site.DistinguishedName } | `
Sort-Object | Get-Unique | `
Foreach-Object { Get-ADReplicationSite $_ } )
$Subnets = Get-ADReplicationSubnet -Filter 'Site -eq $Site'
########################################################################
#
# SITE
#
$SiteInfo = @(
"Type=`"Site`""
"ForestName=`"$($DC.Forest)`""
"Site=`"$($Object.CN)`""
"Location=`"$Location`""
"IntersiteTopologyGenerator=`"$($ISTG.HostName)`""
)
$AdjacentSites | %{ $SiteLink += "AdjacentSite=`"$($_.Name)`"" }
$SiteLinks | %{ $SiteInfo += "SiteLink=`"$($_.Name)`"" }
$Subnets | %{ $SiteInfo += "Subnet=`"$($_.Name)`"" }
Write-Output ($SiteInfo -join " ")
#
########################################################################
#
# SITELINK
#
$SiteLinks | %{
# These values are not stored in the object unless you change them
$cost = if ($_.Cost -eq $null) { 100 } else { $_.Cost }
$options = if ($_.options -eq $null) { 0 } else { $_.options }
$replInterval = if ($_.replInterval -eq $null) { 180 * 60 } else { $_.replInterval * 60 }
$notifications = if ($options -band 0x01) { "True" } else { "False" }
$reciprocal = if ($options -band 0x02) { "True" } else { "False" }
$compression = if ($options -band 0x04) { "False" } else { "True" }
$SiteLink = @(
"Type=`"SiteLink`""
"ForestName=`"$($DC.Forest)`""
"Name=`"$($_.Name)`""
"Cost=`"$($_.Cost)`""
"DataCompressionEnabled=$compression"
"NotificationEnabled=$notifications"
"ReciprocalReplicationEnabled=$reciprocal"
"TransportType=$($_.InterSiteTransportProtocol)"
"ReplicationIntervalSecs=$replInterval"
)
Write-Output ($SiteLink -join " ")
}
$Subnets | Foreach-Object {
$Subnet = @(
"Type=`"Subnet`""
"ForestName=`"$($DC.Forest)`""
"Name=`"$($_.Name)`""
"Site=`"$($Site.Name)`""
"Location=`"$($_.Location)`""
)
Write-Output ($Subnet -join " ")
}

@ -0,0 +1,114 @@
#
# Determine the health and statistics of this Microsoft DNS Server
#
$Output = New-Object System.Collections.ArrayList
$Date = Get-Date -format 'yyyy-MM-ddTHH:mm:sszzz'
write-host -NoNewline ""$Date
# Name of Server
$ServerName = $env:ComputerName
write-host -NoNewline ""Server=`"$ServerName`"
#
# Windows Version and Build #
#
$WindowsInfo = Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$OS = $WindowsInfo.GetValue("ProductName")
$OSSP = $WindowsInfo.GetValue("CSDVersion")
$WinVer = $WindowsInfo.GetValue("CurrentVersion")
$WinBuild = $WindowsInfo.GetValue("CurrentBuildNumber")
$OSVER = "$WinVer ($WinBuild)"
write-host -NoNewline ""OperatingSystem=`"$OS`"
write-host -NoNewline ""ServicePack=`"$OSSP`"
write-host -NoNewline ""OSVersion=`"$OSVER`"
#
# Required Processes Running
# DNS Dnscache w32time
#
$RequiredServices = @( "DNS", "Dnscache", "w32time" )
$srvr = @()
$srvnr = @()
foreach ($srv in $RequiredServices) {
$status = (Get-Service $srv).Status
if ($status -eq "Running") {
$srvr += $srv
} else {
$srvnr += $srv
}
}
$ProcsOK = "False"
if ($srvnr.Count -eq 0) {
$ProcsOK = "True"
}
$ServicesRunning = [string]::join(',', $srvr)
$ServicesNotRunning = [string]::join(',', $srvnr)
write-host -NoNewline ""ServicesRunning=`"$ServicesRunning`" ServicesNotRunning=`"$ServicesNotRunning`" ProcsOK=`"$ProcsOK`"
#
# Settings for this DNS Server
#
$dnsInfo = Get-WmiObject -Namespace "root\MicrosoftDNS" -Class MicrosoftDNS_Server -ComputerName $ServerName
# See http://msdn.microsoft.com/en-us/library/windows/desktop/ms682725(v=vs.85).aspx for details
write-host -NoNewline "" Name=`"$($dnsInfo.Name)`"
write-host -NoNewline "" Version=`"$($dnsInfo.Version)`"
write-host -NoNewline "" LogLevel=`"$($dnsInfo.LogLevel)`"
write-host -NoNewline "" LogFilePath=`"$($dnsInfo.LogFilePath)`"
write-host -NoNewline "" LogFileMaxSize=`"$($dnsInfo.LogFileMaxSize)`"
write-host -NoNewline "" LogIPFilterList=`"$($dnsInfo.LogIPFilterList)`"
write-host -NoNewline "" EventLogLevel=`"$($dnsInfo.EventLogLevel)`"
write-host -NoNewline "" RpcProtocol=`"$($dnsInfo.RpcProtocol)`"
write-host -NoNewline "" NameCheckFlag=`"$NameCheckFlag`"
write-host -NoNewline "" AddressAnswerLimit=`"$($dnsInfo.AddressAnswerLimit)`"
write-host -NoNewline "" RecursionRetry=`"$($dnsInfo.RecursionRetry)`"
write-host -NoNewline "" RecursionTimeout=`"$($dnsInfo.RecursionTimeout)`"
write-host -NoNewline "" DsPollingInterval=`"$($dnsInfo.DsPollingInterval)`"
write-host -NoNewline "" DsTombstoneInteval=`"$($dnsInfo.DsTombstoneInteval)`"
write-host -NoNewline "" MaxCacheTTL=`"$($dnsInfo.MaxCacheTTL)`"
write-host -NoNewline "" MaxNegativeCacheTTL=`"$($dnsInfo.MaxNegativeCacheTTL)`"
write-host -NoNewline "" SendPort=`"$($dnsInfo.SendPort)`"
write-host -NoNewline "" XfrConnectTimeout=`"$($dnsInfo.XfrConnectTimeout)`"
write-host -NoNewline "" BootMethod=`"$($dnsInfo.BootMethod)`"
write-host -NoNewline "" AllowUpdate=`"$($dnsInfo.AllowUpdate)`"
write-host -NoNewline "" UpdateOptions=`"$($dnsInfo.UpdateOptions)`"
write-host -NoNewline "" DsAvailable=`"$($dnsInfo.DsAvailable)`"
write-host -NoNewline "" DisableAutoReverseZones=`"$($dnsInfo.DisableAutoReverseZones)`"
write-host -NoNewline "" AutoCacheUpdate=`"$($dnsInfo.AutoCacheUpdate)`"
write-host -NoNewline "" NoRecursion=`"$($dnsInfo.NoRecursion)`"
write-host -NoNewline "" RoundRobin=`"$($dnsInfo.RoundRobin)`"
write-host -NoNewline "" LocalNetPriority=`"$($dnsInfo.LocalNetPriority)`"
write-host -NoNewline "" StrictFileParsing=`"$($dnsInfo.StrictFileParsing)`"
write-host -NoNewline "" LooseWildcarding=`"$($dnsInfo.LooseWildcarding)`"
write-host -NoNewline "" BindSecondaries=`"$($dnsInfo.BindSecondaries)`"
write-host -NoNewline "" WriteAuthorityNS=`"$($dnsInfo.WriteAuthorityNS)`"
write-host -NoNewline "" ForwardDelegations=`"$($dnsInfo.ForwardDelegations)`"
write-host -NoNewline "" SecureResponses=`"$($dnsInfo.SecureResponses)`"
write-host -NoNewline "" DisjointNets=`"$($dnsInfo.DisjointNets)`"
write-host -NoNewline "" AutoConfigFileZones=`"$($dnsInfo.AutoConfigFileZones)`"
write-host -NoNewline "" ScavengingInterval=`"$($dnsInfo.ScavengingInterval)`"
write-host -NoNewline "" DefaultRefreshInterval=`"$($dnsInfo.DefaultRefreshInterval)`"
write-host -NoNewline "" DefaultNoRefreshInterval=`"$($dnsInfo.DefaultNoRefreshInterval)`"
write-host -NoNewline "" DefaultAgingState=`"$($dnsInfo.DefaultAgingState)`"
write-host -NoNewline "" EDnsCacheTimeout=`"$($dnsInfo.EDnsCacheTimeout)`"
write-host -NoNewline "" EnableEDnsProbes=`"$($dnsInfo.EnableEDnsProbes)`"
write-host -NoNewline "" EnableDnsSec=`"$($dnsInfo.EnableDnsSec)`"
write-host -NoNewline "" ForwardingTimeout=`"$($dnsInfo.ForwardingTimeout)`"
write-host -NoNewline "" IsSlave=`"$($dnsInfo.IsSlave)`"
write-host -NoNewline "" EnableDirectoryPartitions=`"$($dnsInfo.EnableDirectoryPartitions)`"
write-host -NoNewline "" Started=`"$($dnsInfo.Started)`"
write-host -NoNewline "" StartMode=`"$($dnsInfo.StartMode)`"
write-host -NoNewline "" Status=`"$($dnsInfo.Status)`"
foreach ($ip in $dnsInfo.Forwarders) {
write-host -NoNewline "" Forwarder=`"$ip`"
}
foreach ($ip in $dnsInfo.ServerAddresses) {
write-host -NoNewline "" ServerAddress=`"$ip`"
}
foreach ($ip in $dnsInfo.ListenAddresses) {
write-host "" ListenAddress=`"$ip`"
}

@ -0,0 +1,79 @@
#
# DNS Zone Information
#
function Get-WmiCount($a) {
if ($a -eq $Null) {
$cnt = 0
} elseif ($a.GetType().Name -eq "ManagementObject") {
$cnt = 1
} else {
$cnt = $a.Length
}
$cnt
}
function Output-Zoneinfo($Zone) {
#$Output = New-Object System.Collections.ArrayList
$Date = Get-Date -format 'yyyy-MM-ddTHH:mm:sszzz'
write-host -NoNewline $Date Zone=`"$($Zone.Name)`" Aging=`"$($Zone.Aging)`" AllowUpdate=`"$($Zone.AllowUpdate)`" AutoCreated=`"$($Zone.AutoCreated)`" AvailForScavengeTime=`"$($Zone.AvailForScavengeTime)`" Caption=`"$($Zone.Caption)`" ContainerName=`"$($Zone.ContainerName)`" DataFile=`"$($Zone.DataFile)`" DnsServerName=`"$($Zone.DnsServerName)`" DsIntegrated=`"$($Zone.DsIntegrated)`" ForwarderSlave=`"$($Zone.ForwarderSlave)`" ForwarderTimeout=`"$($Zone.ForwarderTimeout)`" LastSuccessfulSoaCheck=`"$($Zone.LastSuccessfulSoaCheck)`" LastSuccessfulXfr=`"$($Zone.LastSuccessfulXfr)`" NoRefreshInterval=`"$($Zone.NoRefreshInterval)`" Notify=`"$($Zone.Notify)`" Paused=`"$($Zone.Paused)`" RefreshInterval=`"$($Zone.RefreshInterval)`" Reverse=`"$($Zone.Reverse)`" SecureSecondaries=`"$($Zone.SecureSecondaries)`" Shutdown=`"$($Zone.Shutdown)`" Status=`"$($Zone.Status)`" UseWins=`"$($Zone.UseWins)`" ZoneType=`"$($Zone.ZoneType)`"
# Some information on the zone itself - # record by type and total
$ZoneName = $Zone.Name
$SOA = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_SOAType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$SOAlen = Get-WmiCount($SOA)
write-host -NoNewline ""SOA=$SOAlen
$NS = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_NSType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$NSlen = Get-WmiCount($NS)
write-host -NoNewline ""NS=$NSlen
$A = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_AType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$Alen = Get-WmiCount($A)
write-host -NoNewline ""A=$Alen
$AAAA = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_AAAAType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$AAAAlen = Get-WmiCount($AAAA)
write-host -NoNewline ""AAAA=$AAAAlen
$CNAME= Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_CNAMEType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$CNAMElen = Get-WmiCount($CNAME)
write-host -NoNewline ""CNAME=$CNAMElen
$MX = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_MXType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$MXlen = Get-WmiCount($MX)
write-host -NoNewline ""MX=$MXlen
$SRV = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_SRVType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$SRVlen = Get-WmiCount($SRV)
write-host -NoNewline ""SRV=$SRVlen
$HINFO= Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_HINFOType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$HINFOlen = Get-WmiCount($HINFO)
write-host -NoNewline ""HINFO=$HINFOlen
$TXT = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_TXTType -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$TXTlen = Get-WmiCount($TXT)
write-host -NoNewline ""TXT=$TXTlen
$RR = Get-WmiObject -namespace "root\MicrosoftDNS" -class MicrosoftDNS_ResourceRecord -ComputerName $env:ComputerName -Filter "DomainName = '$ZoneName'"
$TotalRecords = Get-WmiCount($RR)
write-host ""TotalRecords=$TotalRecords
}
#
# Main Program
#
$ServerName = $env:ComputerName
$Scope = New-Object Management.ManagementScope("\\$ServerName\root\MicrosoftDNS")
$Path = New-Object Management.ManagementPath("MicrosoftDNS_Zone")
$Options = New-Object Management.ObjectGetOptions($Null, [System.TimeSpan]::MaxValue, $True)
$ZoneClass = New-Object Management.ManagementClass($Scope, $Path, $Options)
$Zones = Get-WMIObject -Computer $ServerName -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
$OutputEncoding = [Text.Encoding]::UTF8
Foreach ($Zone in $Zones) {
Output-ZoneInfo($Zone)
}

@ -0,0 +1,20 @@
## This script generates WindowsUpdate.Log using Get-WindowsUpdateLog in $SplunkHome\var\log\Splunk_TA_windows\WindowsUpdate
## It monitors the WindowsUpdate.log from $SplunkHome\var\log\Splunk_TA_windows\
Set-Variable -Name "LogFolder" -Value "$SplunkHome\var\log\Splunk_TA_windows\WindowsUpdate"
Set-Variable -Name "MonitoredLogFile" -Value "$SplunkHome\var\log\Splunk_TA_windows\WindowsUpdate.log"
if (!(Test-Path -Path $LogFolder )) {
New-Item -ItemType directory -Path $LogFolder
}
Get-WindowsUpdateLog -LogPath $LogFolder\WindowsUpdate.log
if ([System.IO.File]::Exists("$MonitoredLogFile")) {
Get-Content "$LogFolder\WindowsUpdate.log" | Set-Content -Path "$MonitoredLogFile"
}
else {
Copy-Item -Path "$LogFolder\WindowsUpdate.log" -Destination "$MonitoredLogFile"
}
exit

@ -0,0 +1,170 @@
#
# Determine the health and statistics of this Active Directory Controller
#
$Output = New-Object System.Collections.ArrayList
$Date = Get-Date -format 'yyyy-MM-ddTHH:mm:sszzz'
[void]$Output.Add($Date)
# Name of Server
$ServerName = $env:ComputerName
[void]$Output.Add("Server=""$ServerName""")
$BSSN = "\\" + $ServerName
# Domain Information
$S_DS_AD_DOM = [System.DirectoryServices.ActiveDirectory.Domain]::getComputerDomain()
$WMI_CS = (Get-WmiObject Win32_ComputerSystem)
$WMI_DOMAIN = Get-WmiObject Win32_NTDomain | Where-Object {$_.DomainControllerName -eq $BSSN}
$DomainDNSName = $WMI_CS.Domain
$DomainNetBIOSName = $WMI_DOMAIN.DomainName
$DomainLevel = $S_DS_AD_DOM.DomainMode
[void]$Output.Add("DomainDNSName=`"$DomainDNSName`"");
[void]$Output.Add("DomainNetBIOSName=`"$DomainNetBIOSName`"");
[void]$Output.Add("DomainLevel=`"$DomainLevel`"");
# Site Information
$SiteName = $WMI_DOMAIN.ClientSiteName
[void]$Output.Add("Site=`"$SiteName`"");
# Forest Information
$ForestName = $S_DS_AD_DOM.Forest.Name
$ForestLevel = $S_DS_AD_DOM.Forest.ForestMode
[void]$Output.Add("ForestName=`"$ForestName`"");
[void]$Output.Add("ForestLevel=`"$ForestLevel`"");
# Domain Controller Flags
$IsRO = "False"
$IsEnabled = "False"
$IsGC = "False"
$USN = "Unknown"
$MyName = ($env:ComputerName + "." + $DomainDNSName).ToLower()
if ($WMI_DOMAIN.Status -eq "OK") {
$MyDC = $S_DS_AD_DOM.DomainControllers | Where-Object { $_.Name.ToLower() -eq $MyName.ToLower() }
if ($MyDC) {
if ($MyDC.IsGlobalCatalog()) {
$IsGC = "True"
}
$USN = $MyDC.HighestCommittedUsn
$IsEnabled = "True"
$entry = $MyDC.getDirectoryEntry()
[void]$Output.Add("Created=`"$($entry.whenCreated)`"")
[void]$Output.Add("Changed=`"$($entry.whenChanged)`"")
$DN = $entry.Path
$ServerEntry = [ADSI]"$DN"
$ServerEntry.GetInfoEx(@("msDS-IsRODC"),0)
$IsRO = $ServerEntry."msDS-IsRODC"
}
}
[void]$Output.Add("GlobalCatalog=`"$IsGC`"")
[void]$Output.Add("RODC=`"$IsRO`"")
[void]$Output.Add("Enabled=`"$IsEnabled`"")
[void]$Output.Add("HighestUSN=`"$USN`"")
$SchemaInfo = Get-Item "HKLM:System\CurrentControlSet\Services\NTDS\Parameters"
$SchemaVersion = $SchemaInfo.GetValue("Schema Version")
[void]$Output.Add("SchemaVersion=$SchemaVersion")
$NetLogonParams = Get-Item "HKLM:System\CurrentControlSet\Services\Netlogon\Parameters"
$DCWeight = $NetLogonParams.GetValue("LdapSrvWeight", $null)
if (!$DCWeight -or $DCWeight -eq $null -or $DCWeight -eq "") {
$DCWeight = 100 # This is the default value
}
[void]$Output.Add("DCWeight=$DCWeight")
$SiteInfoObj = [System.DirectoryServices.ActiveDirectory.Forest]::getCurrentForest().Sites | Where-Object { $_.Name -eq $SiteName }
# Is this host a BridgeHead Server?
# Field BridgeheadServer (Collection of DirectoryServer objects - check to see if we are listed and set IsBridgeHeadServer=True/False accordingly)
# Is this host a Intersite Topology Generator
if ($SiteInfoObj.IntersiteTopologyGenerator.Name -and ($SiteInfoObj.IntersiteTopologyGenerator.Name -eq $ServerName -or $SiteInfoObj.IntersiteTopologyGenerator.Name.ToLower() -eq $MyName)) {
[void]$Output.Add("IsIntersiteTopologyGenerator=`"True`"")
} else {
[void]$Output.Add("IsIntersiteTopologyGenerator=`"False`"")
}
#
# Windows Version and Build #
#
$WindowsInfo = Get-Item "HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$OS = $WindowsInfo.GetValue("ProductName")
$OSSP = $WindowsInfo.GetValue("CSDVersion")
$WinVer = $WindowsInfo.GetValue("CurrentVersion")
$WinBuild = $WindowsInfo.GetValue("CurrentBuildNumber")
$OSVER = "$WinVer ($WinBuild)"
[void]$Output.Add("OperatingSystem=""$OS""")
[void]$Output.Add("ServicePack=""$OSSP""")
[void]$Output.Add("OSVersion=""$OSVER""")
#
# FSMO Roles (Schema, DomainNaming, Infrastructure, RIDMaster, PDC)
#
$aFSMO = @()
if ($MyDC -and $MyDC.Roles) {
foreach ($role in $MyDC.Roles) {
switch ($role) {
"SchemaRole" { $aFSMO += "Schema" }
"NamingRole" { $aFSMO += "DomainNaming" }
"InfrastructureRole" { $aFSMO += "Infrastructure" }
"PdcRole" { $aFSMO += "PDCEmulator" }
"RidRole" { $aFSMO += "RIDMaster" }
}
}
}
$FSMORoles = [string]::join(' ', $aFSMO)
[void]$Output.Add("FSMORoles=""$FSMORoles""")
#
# Required Processes Running
# FRS, DFS-R, Net Logon, KDC, W32Time, ISMSERV
#
$RequiredServices = @( "ntfrs", "dfsr", "netlogon", "kdc", "w32time", "ismserv" )
$srvr = @()
$srvnr = @()
foreach ($srv in $RequiredServices) {
$status = (Get-Service $srv).Status
if ($status -eq "Running") {
$srvr += $srv
} else {
$srvnr += $srv
}
}
# Note that the only case that ProcsOK == True is when there is ONE service
# that isn't running - You need one replication services (ntfrs or dfsr) but
# not both
$ProcsOK = "False"
if (($srvnr.Count -eq 0) -or ($srvnr.Count -eq 1 -and ($srvnr[0] -eq "ntfrs" -or $srvnr[0] -eq "dfsr"))) {
$ProcsOK = "True"
}
$ServicesRunning = [string]::join(',', $srvr)
$ServicesNotRunning = [string]::join(',', $srvnr)
[void]$Output.Add("ServicesRunning=""$ServicesRunning""")
[void]$Output.Add("ServicesNotRunning=""$ServicesNotRunning""")
[void]$Output.Add("ProcsOK=""$ProcsOK""")
#
# Look for Common Problems
# SYSVOL is shared out
# DC is registered in DNS
#
$SysvolShare = (Get-WmiObject Win32_Share|Where-Object { $_.Name -eq "SYSVOL" })
if ($SysvolShare) {
[void]$Output.Add("SYSVOLShare=""True""")
} else {
[void]$Output.Add("SYSVOLShare=""False""")
}
$DNSEntry = ([System.Net.DNS]::GetHostEntry($ServerName))
if ($DNSEntry) {
[void]$Output.Add("DNSRegister=""True""")
} else {
[void]$Output.Add("DNSRegister=""False""")
}
# Output the final string
Write-Host ($output -join " ")

File diff suppressed because one or more lines are too long

@ -0,0 +1,41 @@
#
# Determine and output information about the Site the server is a member of
#
$ServerName = $env:ComputerName
$BSSN = "\\" + $ServerName
$WMI_DOMAIN = Get-WmiObject Win32_NTDomain | Where-Object {$_.DomainControllerName -eq $BSSN}
$SiteName = $WMI_DOMAIN.ClientSiteName
$ForestName = [System.DirectoryServices.ActiveDirectory.Forest]::getCurrentForest().Name
$Date = Get-Date -format 'yyyy-MM-ddTHH:mm:sszzz'
$SiteInfoObj = [System.DirectoryServices.ActiveDirectory.Forest]::getCurrentForest().Sites | Where-Object { $_.Name -eq $SiteName }
$ISTG = $SiteInfoObj.IntersiteTopologyGenerator.Name
write-host $Date Type=`"Site`" ForestName=`"$ForestName`" Site=`"$SiteName`" Location=`"$($SiteInfoObj.Location)`" -NoNewline
$SiteInfoObj.AdjacentSites | Foreach-Object { write-host AdjacentSite=`"$($_.Name)`" -NoNewline }
write-host IntersiteTopologyGenerator=`"$ISTG`" -NoNewline
$SiteInfoObj.SiteLinks | Foreach-Object { write-host "" SiteLink=`"$($_.Name)`" -NoNewline }
$SiteInfoObj.Subnets | Foreach-Object { write-host "" Subnet=`"$($_.Name)`" -nonewline }
write-host #Needed to print a newline for next object
#
# Output Information about Site Links in this site
#
$SiteInfoObj.SiteLinks | Foreach-Object {
write-host $Date Type=`"SiteLink`" ForestName=`"$ForestName`" Name=`"$($_.Name)`" Cost=$($_.Cost) DataCompressionEnabled=$($_.DataCompressionEnabled) NotificationEnabled=$($_.NotificationEnabled) ReciprocalReplicationEnabled=$($_.ReciprocalReplicationEnabled) TransportType=$($_.TransportType) ReplicationIntervalSecs=$($_.ReplicationInterval.TotalSeconds) -NoNewLine
foreach ($site in $_.Sites) {
write-host ""Site=`"$($site.Name)`" -NoNewLine
}
}
Write-Host #similar to above
#
# Output Information about Subnets in this site
#
$SiteInfoObj.Subnets | Foreach-Object {
write-Host $Date Type=`"Subnet`" ForestName=`"$ForestName`" Name=`"$($_.Name)`" Site=`"$SiteName`" Location=`"$($_.Location)`"
}

@ -0,0 +1,14 @@
@ECHO OFF
:: ######################################################
:: #
:: # Splunk for Microsoft Windows
:: #
:: # Copyright (C) 2019 Splunk, Inc.
:: # All Rights Reserved
:: #
:: ######################################################
set SplunkApp=Splunk_TA_windows
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -executionPolicy RemoteSigned -command ". '%SPLUNK_HOME%\etc\apps\%SplunkApp%\bin\powershell\%1'"

@ -0,0 +1,94 @@
import csv
import sys
import log
import logging
# Map for possible property flags
property_flags = {
"1": "SCRIPT",
"2": "ACCOUNTDISABLE",
"8": "HOMEDIR_REQUIRED",
"16": "LOCKOUT",
"32": "PASSWD_NOTREQD",
"64": "PASSWD_CANT_CHANGE",
"128": "ENCRYPTED_TEXT_PWD_ALLOWED",
"256": "TEMP_DUPLICATE_ACCOUNT",
"512": "NORMAL_ACCOUNT",
"2048": "INTERDOMAIN_TRUST_ACCOUNT",
"4096": "WORKSTATION_TRUST_ACCOUNT",
"8192": "SERVER_TRUST_ACCOUNT",
"65536": "DONT_EXPIRE_PASSWORD",
"131072": "MNS_LOGON_ACCOUNT",
"262144": "SMARTCARD_REQUIRED",
"524288": "TRUSTED_FOR_DELEGATION",
"1048576": "NOT_DELEGATED",
"2097152": "USE_DES_KEY_ONLY",
"4194304": "DONT_REQ_PREAUTH",
"8388608": "PASSWORD_EXPIRED",
"16777216": "TRUSTED_TO_AUTH_FOR_DELEGATION",
"67108864": "PARTIAL_SECRETS_ACCOUNT"
}
def main():
logger = log.Log().get_logger("user_account_control_property")
logger.info("Lookup script started executing..")
# prints usage of the lookup script if wrong number of arguments provided
if len(sys.argv) != 3:
logger.debug("Usage: python user_account_control_property.py [userAccountControl] [userAccountPropertyFlag]")
logger.debug("Lookup script stopped..")
sys.exit(1)
# Lookup Field names
userAccountControl = sys.argv[1]
userAccountPropertyFlag = sys.argv[2]
infile = sys.stdin
outfile = sys.stdout
r = csv.DictReader(infile)
w = csv.DictWriter(outfile, fieldnames=r.fieldnames)
w.writeheader()
# Decode flags for every 'userAccountControl' attribute value present in a search result
for result in r:
try:
if result[userAccountControl].isdigit():
attribute_value = int(result[userAccountControl])
bit_cnt = 0
incorrect_result_flag = False
flags = list()
# Prepare flag list by decoding 'userAccountcontrol' decimal value
# As 'userAccountControl' is decimal value, For each bit set to '1' a property flag can be denoted by using 'property_flags' map given above
while attribute_value != 0:
if attribute_value & 1 == 1:
flags.append(str(1 << bit_cnt))
attribute_value = attribute_value >> 1
bit_cnt += 1
# If flag not present in 'property_flags' map, The 'userAccountPropertyFlag' won't be populated in search result
for flag in flags:
if flag not in list(property_flags.keys()):
logger.debug("'userAccountControl' attribute can not be decoded for value: {}".format(
result[userAccountControl]))
incorrect_result_flag = True
break
if incorrect_result_flag:
continue
else:
for flag in flags:
result[userAccountPropertyFlag] = property_flags[flag]
w.writerow(result)
else:
logger.debug("'userAccountControl' attribute can not be decoded for value: {}".format(result[userAccountControl]))
except:
logger.debug(
"No results for 'userAccountControl' attribute value :{}".format(result[userAccountControl]))
if __name__ == '__main__':
main()

@ -0,0 +1,67 @@
@echo off
REM --------------------------------------------------------
REM Copyright (C) 2020 Splunk Inc. All Rights Reserved.
REM --------------------------------------------------------
setlocal EnableDelayedExpansion
REM For each app key, print out the name of the app and any parameters under the entry
for /f "tokens=*" %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" ^| findstr "Uninstall\\"') do (call :output_reg "%%G" 72)
REM Do the same as above but with 32-bit apps, first checking if the key exists
reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" >nul 2>&1
if %ERRORLEVEL% EQU 0 (
for /f "tokens=*" %%G in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" ^| findstr "Uninstall\\"') do (call :output_reg "%%G" 84)
)
goto :eof
:output_reg
REM Echo an empty line to indicate that this is a new entry
@echo.
REM Get the current date and time into into a variable
for /f "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /value 2^>nul`) do if '.%%i.'=='.LocalDateTime.' set date_time=%%j
set date_time=%date_time:~0,4%-%date_time:~4,2%-%date_time:~6,2% %date_time:~8,2%:%date_time:~10,2%:%date_time:~12,6%
REM Print out the date & time
@echo %date_time%
REM Add the enumerated key
@echo Installed application enumerated from %1
REM Get the name of the app from the last segment in the registry path
set app_name=%1
REM Strips out the first x characters (from input) of the path in order to get just the app name
set "app_name=!app_name:~%2%,150!"
REM Strip the last quote
set "app_name=!app_name:~0,-1!"
REM Store a count value so that we can avoid printing the first entry
set count=0
REM This variable determines if the display name was found
set display_name_found=0
REM Now get the sub-keys
for /F "tokens=1,2*" %%A in ('reg query %1') do (
set /a count+=1
REM Skip the entry if it just repeats the name we are querying for or if it is blank or if is "<NO" (which indicates the item has no name)
REM Note that the display name was already found
if %%A==DisplayName (
set /a display_name_found=1
echo %%A="%%C"
) else (
REM Skip the entry if it just repeats the name we are querying for or if it is blank or if is "<NO" (which indicates the item has no name)
if not "%%A" == %1 if not "%%A" == "" if not "%%A" == "<NO" if not "%%C" == "" if not %%A==DisplayName echo %%A=%%C
)
)
REM If the display name was not found, then use the name of the registry path name instead
if !display_name_found!==0 echo DisplayName="%app_name%"

@ -0,0 +1,46 @@
@echo off
REM --------------------------------------------------------
REM Copyright (C) 2020 Splunk Inc. All Rights Reserved.
REM --------------------------------------------------------
setlocal EnableDelayedExpansion
REM Get the current date and time into a variable
for /f "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /value 2^>nul`) do if '.%%i.'=='.LocalDateTime.' set date_time=%%j
set date_time=%date_time:~0,4%-%date_time:~4,2%-%date_time:~6,2% %date_time:~8,2%:%date_time:~10,2%:%date_time:~12,6%
REM Get the list of open ports by running netstat and filtering the results to those that contain actual ports (dropping the header)
for /f "tokens=*" %%G in ('netstat -nao ^| findstr /r "LISTENING"') do (call :output_ports "%%G")
goto :eof
:output_ports
REM Parse the ports list
for /f "tokens=1,2,4,5 delims= " %%A in (%1) do (
set protocol=%%A
set dest=%%B
set status=%%C
set pid=%%D
)
REM Skip the header
if "!protocol!"=="Proto" goto :eof
if "!protocol!"=="Active" goto :eof
REM Parse the each port
for /f "tokens=1,2,3 delims=:" %%A in ("%dest%") do (
set dest_ip=%%A
set dest_port=%%B
set alt_dest_port=%%C
REM Some entries will exist in the [::]:0 format and thus throw off the parsing. Correct for this:
if "!dest_port!" == "]" set dest_port=!alt_dest_port!
)
REM Replace the dest IP with the empty IP range if necessary
if "!dest_ip!"=="[" set dest_ip=[::]
REM Print out the result
echo %date_time% transport=%protocol% dest_ip=%dest_ip% dest_port=%dest_port% pid=!pid!

@ -0,0 +1,21 @@
@echo off
REM --------------------------------------------------------
REM Copyright (C) 2020 Splunk Inc. All Rights Reserved.
REM --------------------------------------------------------
setlocal EnableDelayedExpansion
REM Get the time service configuration and timezone.
REM Get the date & time
for /f "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /value 2^>nul`) do if '.%%i.'=='.LocalDateTime.' set date_time=%%j
set date_time=%date_time:~0,4%-%date_time:~4,2%-%date_time:~6,2% %date_time:~8,2%:%date_time:~10,2%:%date_time:~12,6%
REM Print the date and time. This will be the timestamp of the event.
echo Current time: %date_time%
REM Print the Windows time service configuration
w32tm /query /configuration /verbose
REM Print the Windows time zone information
w32tm /tz

@ -0,0 +1,28 @@
@echo off
REM --------------------------------------------------------
REM Copyright (C) 2020 Splunk Inc. All Rights Reserved.
REM --------------------------------------------------------
setlocal EnableDelayedExpansion
REM Get the last current time synchronization status
REM
REM Example:
REM
REM Successful sync:
REM Last Successful Sync Time: 1/22/2014 12:06:43 PM
REM Unsuccessful sync:
REM Last Successful Sync Time: unspecified
REM Get the date & time
for /f "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /value 2^>nul`) do if '.%%i.'=='.LocalDateTime.' set date_time=%%j
set date_time=%date_time:~0,4%-%date_time:~4,2%-%date_time:~6,2% %date_time:~8,2%:%date_time:~10,2%:%date_time:~12,6%
REM Print the date and time. This will be the timestamp of the event.
echo Current time: %date_time%
REM Print the Windows time service status
w32tm /query /status /verbose
REM Print the time zone
w32tm /tz

@ -0,0 +1,29 @@
######################################################
#
# Splunk_TA_windows_dc
# Custom: This is a sub-TA from the Splunk_TA_windows
# application, that includes on the Active Directory
# inputs. These inputs include predefined settings
# based off of best practices, but can be adjusted
# as needed to fit your environment and needs. It
# is provided by the MS Windows AD Objects application.
# Copyright (C) 2020 Splunk Inc. All Rights Reserved.
#
######################################################
[install]
is_configured = false
state = enabled
build = 1
[ui]
is_visible = false
label = Splunk Add-on for Microsoft Windows for AD Domain Controllers
[launcher]
author = Splunk, Inc. Custom Steve Hogan
version = 8.0.0
description = Splunk Add-on for Microsoft Windows with specific predefined inputs for Active Directory Domain Controllers.
[package]
id = Splunk_TA_windows_dc

@ -0,0 +1,486 @@
# Copyright (C) 2020 Splunk Inc. All Rights Reserved.
# Custom TA Used by the MS Windows AD Objects application
# Uses the Splunk_TA_windows TA
# DO NOT EDIT THIS FILE!
# Please make all changes to files in $SPLUNK_HOME/etc/apps/Splunk_TA_windows_dc/local.
# To make changes, copy the section/stanza you want to change from $SPLUNK_HOME/etc/apps/Splunk_TA_windows_dc/default
# into $SPLUNK_HOME/etc/apps/Splunk_TA_windows_dc/local and edit there.
# *** Predefined Settings and Changes from the default\inputs.conf:
# - Index Settings: All of the enabled inputs below have predefined indexes based off of standard
# - Perfmon.. Inputs - mode Setting: The mode setting has been set to single, instead of multikv
# - WinEventLogs - renderxml Setting: XML Rendering of the WinEventLogs... is set to false, instead of true.
###### OS Logs ######
[WinEventLog://Application]
disabled = 1
start_from = oldest
current_only = 0
checkpointInterval = 5
renderXml=false
index=wineventlog
[WinEventLog://Security]
disabled = 1
start_from = oldest
current_only = 0
evt_resolve_ad_obj = 1
checkpointInterval = 5
blacklist1 = EventCode="4662" Message="Object Type:(?!\s*groupPolicyContainer)"
blacklist2 = EventCode="566" Message="Object Type:(?!\s*groupPolicyContainer)"
renderXml=false
index=wineventlog
[WinEventLog://System]
disabled = 1
start_from = oldest
current_only = 0
checkpointInterval = 5
renderXml=false
index=wineventlog
###### Forwarded WinEventLogs (WEF) ######
[WinEventLog://ForwardedEvents]
disabled = 1
start_from = oldest
current_only = 0
checkpointInterval = 5
## The addon supports only XML format for the collection of WinEventLogs using WEF, hence do not change the below renderXml parameter to false.
renderXml=false
host=WinEventLogForwardHost
index=wineventlog
###### WinEventLog Inputs for Active Directory ######
## Application and Services Logs - DFS Replication
[WinEventLog://DFS Replication]
disabled = 1
renderXml=false
index=wineventlog
## Application and Services Logs - Directory Service
[WinEventLog://Directory Service]
disabled = 1
renderXml=false
index=wineventlog
## Application and Services Logs - File Replication Service
[WinEventLog://File Replication Service]
disabled = 1
renderXml=false
index=wineventlog
## Application and Services Logs - Key Management Service
[WinEventLog://Key Management Service]
disabled = 1
renderXml=false
index=wineventlog
###### WinEventLog Inputs for DNS ######
[WinEventLog://DNS Server]
disabled=1
renderXml=false
index=wineventlog
###### DHCP ######
[monitor://$WINDIR\System32\DHCP]
disabled = 1
whitelist = DhcpSrvLog*
crcSalt = <SOURCE>
sourcetype = DhcpSrvLog
index=msad
###### Windows Update Log ######
## Enable below stanza to get WindowsUpdate.log for Windows 8, Windows 8.1, Server 2008R2, Server 2012 and Server 2012R2
[monitor://$WINDIR\WindowsUpdate.log]
disabled = 1
sourcetype = WindowsUpdateLog
index=windows
## Enable below powershell and monitor stanzas to get WindowsUpdate.log for Windows 10 and Server 2016
## Below stanza will automatically generate WindowsUpdate.log daily
[powershell://generate_windows_update_logs]
script = ."$SplunkHome\etc\apps\Splunk_TA_windows\bin\powershell\generate_windows_update_logs.ps1"
schedule = 0 */24 * * *
disabled = 1
index=windows
## Below stanza will monitor the generated WindowsUpdate.log in Windows 10 and Server 2016
[monitor://$SPLUNK_HOME\var\log\Splunk_TA_windows\WindowsUpdate.log]
disabled = 1
sourcetype = WindowsUpdateLog
index=windows
###### Monitor Inputs for Active Directory ######
[monitor://$WINDIR\debug\netlogon.log]
sourcetype=MSAD:NT6:Netlogon
disabled=1
index=msad
###### Monitor Inputs for DNS ######
[MonitorNoHandle://$WINDIR\System32\Dns\dns.log]
sourcetype=MSAD:NT6:DNS
disabled=1
index=msad
###### Scripted Input (See also wmi.conf)
[script://.\bin\win_listening_ports.bat]
disabled = 1
## Run once per hour
interval = 3600
sourcetype = Script:ListeningPorts
index=windows
[script://.\bin\win_installed_apps.bat]
disabled = 1
## Run once per day
interval = 86400
sourcetype = Script:InstalledApps
index=windows
[script://.\bin\win_timesync_status.bat]
disabled = 1
## Run once per hour
interval = 3600
sourcetype = Script:TimesyncStatus
index=windows
[script://.\bin\win_timesync_configuration.bat]
disabled = 1
## Run once per hour
interval = 3600
sourcetype = Script:TimesyncConfiguration
index=windows
[script://.\bin\netsh_address.bat]
disabled = 1
## Run once per day
interval = 86400
sourcetype = Script:NetworkConfiguration
index=windows
###### Scripted/Powershell Mod inputs Active Directory ######
## Replication Information NT6
[script://.\bin\runpowershell.cmd nt6-repl-stat.ps1]
source=Powershell
sourcetype=MSAD:NT6:Replication
interval=300
disabled=1
index=msad
## Replication Information 2012r2 and 2016
[powershell://Replication-Stats]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-repl-stats.ps1"
schedule = 0 */5 * ? * *
source = Powershell
sourcetype=MSAD:NT6:Replication
disabled=1
index=msad
## Health and Topology Information NT6
[script://.\bin\runpowershell.cmd nt6-health.ps1]
source=Powershell
sourcetype=MSAD:NT6:Health
interval=300
disabled=1
index=msad
## Health and Topology Information 2012r2 and 2016
[powershell://AD-Health]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-health.ps1"
schedule = 0 */5 * ? * *
source=Powershell
sourcetype=MSAD:NT6:Health
disabled=1
index=msad
## Site, Site Link and Subnet Information NT6
[script://.\bin\runpowershell.cmd nt6-siteinfo.ps1]
source=Powershell
sourcetype=MSAD:NT6:SiteInfo
interval=3600
disabled=1
index=msad
## Site, Site Link and Subnet Information 2012r2 and 2016
[powershell://Siteinfo]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-siteinfo.ps1"
schedule = 0 15 * ? * *
source = Powershell
sourcetype=MSAD:NT6:SiteInfo
disabled=1
index=msad
##### Scripted Inputs for DNS #####
## DNS Zone Information Collection
[script://.\bin\runpowershell.cmd dns-zoneinfo.ps1]
source=Powershell
sourcetype=MSAD:NT6:DNS-Zone-Information
interval=3600
disabled=1
index=msad
## DNS Health Information Collection
[script://.\bin\runpowershell.cmd dns-health.ps1]
source=Powershell
sourcetype=MSAD:NT6:DNS-Health
interval=3600
disabled=1
index=msad
###### Host monitoring ######
[WinHostMon://Computer]
interval = 600
disabled = 1
type = Computer
index=windows
[WinHostMon://Process]
interval = 600
disabled = 1
type = Process
index=windows
[WinHostMon://Processor]
interval = 600
disabled = 1
type = Processor
index=windows
[WinHostMon://NetworkAdapter]
interval = 600
disabled = 1
type = NetworkAdapter
index=windows
[WinHostMon://Service]
interval = 600
disabled = 1
type = Service
index=windows
[WinHostMon://OperatingSystem]
interval = 600
disabled = 1
type = OperatingSystem
index=windows
[WinHostMon://Disk]
interval = 600
disabled = 1
type = Disk
index=windows
[WinHostMon://Driver]
interval = 600
disabled = 1
type = Driver
index=windows
[WinHostMon://Roles]
interval = 600
disabled = 1
type = Roles
index=windows
###### Print monitoring ######
[WinPrintMon://printer]
type = printer
interval = 600
baseline = 1
disabled = 1
index=windows
[WinPrintMon://driver]
type = driver
interval = 600
baseline = 1
disabled = 1
index=windows
[WinPrintMon://port]
type = port
interval = 600
baseline = 1
disabled = 1
index=windows
###### Network monitoring ######
[WinNetMon://inbound]
direction = inbound
disabled = 1
index=windows
[WinNetMon://outbound]
direction = outbound
disabled = 1
index=windows
###### Splunk 5.0+ Performance Counters ######
## CPU
[perfmon://CPU]
counters = % Processor Time; % User Time; % Privileged Time; Interrupts/sec; % DPC Time; % Interrupt Time; DPCs Queued/sec; DPC Rate; % Idle Time; % C1 Time; % C2 Time; % C3 Time; C1 Transitions/sec; C2 Transitions/sec; C3 Transitions/sec
disabled = 1
instances = *
interval = 10
mode = single
object = Processor
useEnglishOnly=true
index=perfmon
## Logical Disk
[perfmon://LogicalDisk]
counters = % Free Space; Free Megabytes; Current Disk Queue Length; % Disk Time; Avg. Disk Queue Length; % Disk Read Time; Avg. Disk Read Queue Length; % Disk Write Time; Avg. Disk Write Queue Length; Avg. Disk sec/Transfer; Avg. Disk sec/Read; Avg. Disk sec/Write; Disk Transfers/sec; Disk Reads/sec; Disk Writes/sec; Disk Bytes/sec; Disk Read Bytes/sec; Disk Write Bytes/sec; Avg. Disk Bytes/Transfer; Avg. Disk Bytes/Read; Avg. Disk Bytes/Write; % Idle Time; Split IO/Sec
disabled = 1
instances = *
interval = 10
mode = single
object = LogicalDisk
useEnglishOnly=true
index=perfmon
## Physical Disk
[perfmon://PhysicalDisk]
counters = Current Disk Queue Length; % Disk Time; Avg. Disk Queue Length; % Disk Read Time; Avg. Disk Read Queue Length; % Disk Write Time; Avg. Disk Write Queue Length; Avg. Disk sec/Transfer; Avg. Disk sec/Read; Avg. Disk sec/Write; Disk Transfers/sec; Disk Reads/sec; Disk Writes/sec; Disk Bytes/sec; Disk Read Bytes/sec; Disk Write Bytes/sec; Avg. Disk Bytes/Transfer; Avg. Disk Bytes/Read; Avg. Disk Bytes/Write; % Idle Time; Split IO/Sec
disabled = 1
instances = *
interval = 10
mode = single
object = PhysicalDisk
useEnglishOnly=true
index=perfmon
## Memory
[perfmon://Memory]
counters = Page Faults/sec; Available Bytes; Committed Bytes; Commit Limit; Write Copies/sec; Transition Faults/sec; Cache Faults/sec; Demand Zero Faults/sec; Pages/sec; Pages Input/sec; Page Reads/sec; Pages Output/sec; Pool Paged Bytes; Pool Nonpaged Bytes; Page Writes/sec; Pool Paged Allocs; Pool Nonpaged Allocs; Free System Page Table Entries; Cache Bytes; Cache Bytes Peak; Pool Paged Resident Bytes; System Code Total Bytes; System Code Resident Bytes; System Driver Total Bytes; System Driver Resident Bytes; System Cache Resident Bytes; % Committed Bytes In Use; Available KBytes; Available MBytes; Transition Pages RePurposed/sec; Free & Zero Page List Bytes; Modified Page List Bytes; Standby Cache Reserve Bytes; Standby Cache Normal Priority Bytes; Standby Cache Core Bytes; Long-Term Average Standby Cache Lifetime (s)
disabled = 1
interval = 10
mode = single
object = Memory
useEnglishOnly=true
index=perfmon
## Network
[perfmon://Network]
counters = Bytes Total/sec; Packets/sec; Packets Received/sec; Packets Sent/sec; Current Bandwidth; Bytes Received/sec; Packets Received Unicast/sec; Packets Received Non-Unicast/sec; Packets Received Discarded; Packets Received Errors; Packets Received Unknown; Bytes Sent/sec; Packets Sent Unicast/sec; Packets Sent Non-Unicast/sec; Packets Outbound Discarded; Packets Outbound Errors; Output Queue Length; Offloaded Connections; TCP Active RSC Connections; TCP RSC Coalesced Packets/sec; TCP RSC Exceptions/sec; TCP RSC Average Packet Size
disabled = 1
instances = *
interval = 10
mode = single
object = Network Interface
useEnglishOnly=true
index=perfmon
## Process
[perfmon://Process]
counters = % Processor Time; % User Time; % Privileged Time; Virtual Bytes Peak; Virtual Bytes; Page Faults/sec; Working Set Peak; Working Set; Page File Bytes Peak; Page File Bytes; Private Bytes; Thread Count; Priority Base; Elapsed Time; ID Process; Creating Process ID; Pool Paged Bytes; Pool Nonpaged Bytes; Handle Count; IO Read Operations/sec; IO Write Operations/sec; IO Data Operations/sec; IO Other Operations/sec; IO Read Bytes/sec; IO Write Bytes/sec; IO Data Bytes/sec; IO Other Bytes/sec; Working Set - Private
disabled = 1
instances = *
interval = 10
mode = single
object = Process
useEnglishOnly=true
index=perfmon
## ProcessInformation
[perfmon://ProcessorInformation]
counters = % Processor Time; Processor Frequency
disabled = 1
instances = *
interval = 10
mode = single
object = Processor Information
useEnglishOnly=true
index=perfmon
## System
[perfmon://System]
counters = File Read Operations/sec; File Write Operations/sec; File Control Operations/sec; File Read Bytes/sec; File Write Bytes/sec; File Control Bytes/sec; Context Switches/sec; System Calls/sec; File Data Operations/sec; System Up Time; Processor Queue Length; Processes; Threads; Alignment Fixups/sec; Exception Dispatches/sec; Floating Emulations/sec; % Registry Quota In Use
disabled = 1
instances = *
interval = 10
mode = single
object = System
useEnglishOnly=true
index=perfmon
###### Perfmon Inputs from TA-AD/TA-DNS ######
[perfmon://Processor]
object = Processor
counters = % Processor Time; % User Time; % Privileged Time; Interrupts/sec; % DPC Time; % Interrupt Time; DPCs Queued/sec; DPC Rate; % Idle Time; % C1 Time; % C2 Time; % C3 Time; C1 Transitions/sec; C2 Transitions/sec; C3 Transitions/sec
instances = *
interval = 10
disabled = 1
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://Network_Interface]
object = Network Interface
counters = Bytes Total/sec; Packets/sec; Packets Received/sec; Packets Sent/sec; Current Bandwidth; Bytes Received/sec; Packets Received Unicast/sec; Packets Received Non-Unicast/sec; Packets Received Discarded; Packets Received Errors; Packets Received Unknown; Bytes Sent/sec; Packets Sent Unicast/sec; Packets Sent Non-Unicast/sec; Packets Outbound Discarded; Packets Outbound Errors; Output Queue Length; Offloaded Connections; TCP Active RSC Connections; TCP RSC Coalesced Packets/sec; TCP RSC Exceptions/sec; TCP RSC Average Packet Size
instances = *
interval = 10
disabled = 1
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://DFS_Replicated_Folders]
object = DFS Replicated Folders
counters = Bandwidth Savings Using DFS Replication; RDC Bytes Received; RDC Compressed Size of Files Received; RDC Size of Files Received; RDC Number of Files Received; Compressed Size of Files Received; Size of Files Received; Total Files Received; Deleted Space In Use; Deleted Bytes Cleaned up; Deleted Files Cleaned up; Deleted Bytes Generated; Deleted Files Generated; Updates Dropped; File Installs Retried; File Installs Succeeded; Conflict Folder Cleanups Completed; Conflict Space In Use; Conflict Bytes Cleaned up; Conflict Files Cleaned up; Conflict Bytes Generated; Conflict Files Generated; Staging Space In Use; Staging Bytes Cleaned up; Staging Files Cleaned up; Staging Bytes Generated; Staging Files Generated
instances = *
interval = 30
disabled = 1
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://NTDS]
object = NTDS
counters = DRA Inbound Properties Total/sec; AB Browses/sec; DRA Inbound Objects Applied/sec; DS Threads in Use; AB Client Sessions; DRA Pending Replication Synchronizations; DRA Inbound Object Updates Remaining in Packet; DS Security Descriptor sub-operations/sec; DS Security Descriptor Propagations Events; LDAP Client Sessions; LDAP Active Threads; LDAP Writes/sec; LDAP Searches/sec; DRA Outbound Objects/sec; DRA Outbound Properties/sec; DRA Inbound Values Total/sec; DRA Sync Requests Made; DRA Sync Requests Successful; DRA Sync Failures on Schema Mismatch; DRA Inbound Objects/sec; DRA Inbound Properties Applied/sec; DRA Inbound Properties Filtered/sec; DS Monitor List Size; DS Notify Queue Size; LDAP UDP operations/sec; DS Search sub-operations/sec; DS Name Cache hit rate; DRA Highest USN Issued (Low part); DRA Highest USN Issued (High part); DRA Highest USN Committed (Low part); DRA Highest USN Committed (High part); DS % Writes from SAM; DS % Writes from DRA; DS % Writes from LDAP; DS % Writes from LSA; DS % Writes from KCC; DS % Writes from NSPI; DS % Writes Other; DS Directory Writes/sec; DS % Searches from SAM; DS % Searches from DRA; DS % Searches from LDAP; DS % Searches from LSA; DS % Searches from KCC; DS % Searches from NSPI; DS % Searches Other; DS Directory Searches/sec; DS % Reads from SAM; DS % Reads from DRA; DRA Inbound Values (DNs only)/sec; DRA Inbound Objects Filtered/sec; DS % Reads from LSA; DS % Reads from KCC; DS % Reads from NSPI; DS % Reads Other; DS Directory Reads/sec; LDAP Successful Binds/sec; LDAP Bind Time; SAM Successful Computer Creations/sec: Includes all requests; SAM Machine Creation Attempts/sec; SAM Successful User Creations/sec; SAM User Creation Attempts/sec; SAM Password Changes/sec; SAM Membership Changes/sec; SAM Display Information Queries/sec; SAM Enumerations/sec; SAM Transitive Membership Evaluations/sec; SAM Non-Transitive Membership Evaluations/sec; SAM Domain Local Group Membership Evaluations/sec; SAM Universal Group Membership Evaluations/sec; SAM Global Group Membership Evaluations/sec; SAM GC Evaluations/sec; DRA Inbound Full Sync Objects Remaining; DRA Inbound Bytes Total/sec; DRA Inbound Bytes Not Compressed (Within Site)/sec; DRA Inbound Bytes Compressed (Between Sites, Before Compression)/sec; DRA Inbound Bytes Compressed (Between Sites, After Compression)/sec; DRA Outbound Bytes Total/sec; DRA Outbound Bytes Not Compressed (Within Site)/sec; DRA Outbound Bytes Compressed (Between Sites, Before Compression)/sec; DRA Outbound Bytes Compressed (Between Sites, After Compression)/sec; DS Client Binds/sec; DS Server Binds/sec; DS Client Name Translations/sec; DS Server Name Translations/sec; DS Security Descriptor Propagator Runtime Queue; DS Security Descriptor Propagator Average Exclusion Time; DRA Outbound Objects Filtered/sec; DRA Outbound Values Total/sec; DRA Outbound Values (DNs only)/sec; AB ANR/sec; AB Property Reads/sec; AB Searches/sec; AB Matches/sec; AB Proxy Lookups/sec; ATQ Threads Total; ATQ Threads LDAP; ATQ Threads Other; DRA Inbound Bytes Total Since Boot; DRA Inbound Bytes Not Compressed (Within Site) Since Boot; DRA Inbound Bytes Compressed (Between Sites, Before Compression) Since Boot; DRA Inbound Bytes Compressed (Between Sites, After Compression) Since Boot; DRA Outbound Bytes Total Since Boot; DRA Outbound Bytes Not Compressed (Within Site) Since Boot; DRA Outbound Bytes Compressed (Between Sites, Before Compression) Since Boot; DRA Outbound Bytes Compressed (Between Sites, After Compression) Since Boot; LDAP New Connections/sec; LDAP Closed Connections/sec; LDAP New SSL Connections/sec; DRA Pending Replication Operations; DRA Threads Getting NC Changes; DRA Threads Getting NC Changes Holding Semaphore; DRA Inbound Link Value Updates Remaining in Packet; DRA Inbound Total Updates Remaining in Packet; DS % Writes from NTDSAPI; DS % Searches from NTDSAPI; DS % Reads from NTDSAPI; SAM Account Group Evaluation Latency; SAM Resource Group Evaluation Latency; ATQ Outstanding Queued Requests; ATQ Request Latency; ATQ Estimated Queue Delay; Tombstones Garbage Collected/sec; Phantoms Cleaned/sec; Link Values Cleaned/sec; Tombstones Visited/sec; Phantoms Visited/sec; NTLM Binds/sec; Negotiated Binds/sec; Digest Binds/sec; Simple Binds/sec; External Binds/sec; Fast Binds/sec; Base searches/sec; Subtree searches/sec; Onelevel searches/sec; Database adds/sec; Database modifys/sec; Database deletes/sec; Database recycles/sec; Approximate highest DNT; Transitive operations/sec; Transitive suboperations/sec; Transitive operations milliseconds run
interval = 10
disabled = 1
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://DNS]
object = DNS
counters = Total Query Received; Total Query Received/sec; UDP Query Received; UDP Query Received/sec; TCP Query Received; TCP Query Received/sec; Total Response Sent; Total Response Sent/sec; UDP Response Sent; UDP Response Sent/sec; TCP Response Sent; TCP Response Sent/sec; Recursive Queries; Recursive Queries/sec; Recursive Send TimeOuts; Recursive TimeOut/sec; Recursive Query Failure; Recursive Query Failure/sec; Notify Sent; Zone Transfer Request Received; Zone Transfer Success; Zone Transfer Failure; AXFR Request Received; AXFR Success Sent; IXFR Request Received; IXFR Success Sent; Notify Received; Zone Transfer SOA Request Sent; AXFR Request Sent; AXFR Response Received; AXFR Success Received; IXFR Request Sent; IXFR Response Received; IXFR Success Received; IXFR UDP Success Received; IXFR TCP Success Received; WINS Lookup Received; WINS Lookup Received/sec; WINS Response Sent; WINS Response Sent/sec; WINS Reverse Lookup Received; WINS Reverse Lookup Received/sec; WINS Reverse Response Sent; WINS Reverse Response Sent/sec; Dynamic Update Received; Dynamic Update Received/sec; Dynamic Update NoOperation; Dynamic Update NoOperation/sec; Dynamic Update Written to Database; Dynamic Update Written to Database/sec; Dynamic Update Rejected; Dynamic Update TimeOuts; Dynamic Update Queued; Secure Update Received; Secure Update Received/sec; Secure Update Failure; Database Node Memory; Record Flow Memory; Caching Memory; UDP Message Memory; TCP Message Memory; Nbstat Memory; Unmatched Responses Received
interval = 10
disabled = 1
mode = single
useEnglishOnly=true
index=perfmon
[WinRegMon://default]
disabled = 1
hive = .*
proc = .*
type = rename|set|delete|create
index = windows
[WinRegMon://hkcu_run]
disabled = 1
hive = \\REGISTRY\\USER\\.*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\.*
proc = .*
type = set|create|delete|rename
index = windows
[WinRegMon://hklm_run]
disabled = 1
hive = \\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\.*
proc = .*
type = set|create|delete|rename
index = windows

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,213 @@
# MS Windows AD Objects provided pre-defined - AD Domain Controller inputs
# - Custom Input Settings from the Splunk_TA_windows TA
#
# ---------------------------------------------------------------------------------------
# NOTE:
# *** This inputs.conf only contains pre-defined and enabled inputs for only
# Active Directory Domain Controllers. The inputs enabled are set with the
# disabled = 0 setting and can be adjusted for your required needs.
# *** IMPORTANT: It is important that you also have the MS Windows AD Objects pre-defined
# base OS enabled inputs that are available with the MS Windows AD Objects application.
# Special Notes:
# *** Recommended Input for MS Windows AD Objects application:
# - To ensure the smoothest configuration of the MS Windows AD Objects
# application, it is highly recommended to have the following input enabled,
# which collects the Active Directory Domain details used to build the
# AD_Obj_Domain lookup. This lookup is critical for the other leveraged lookups.
# *** Predefined Settings and Changes from the default\inputs.conf:
# - Index Settings: All of the enabled inputs below have predefined indexes based off of standard
# - Perfmon.. Inputs - mode Setting: The mode setting has been set to single, instead of multikv
# - WinEventLogs - renderxml Setting: XML Rendering of the WinEventLogs... is set to false, instead of true.
# recommendations. You can adjust these to match your requirements and created indexes.
# *** Renaming the applications folder, from Splunk_TA_windows_dc:
# - If you want to use a different name than Splunk_TA_windows_dc then
# you will need to update script setting in the following inputs:
# - [powershell://Replication-Stats]
# - [powershell://AD-Health]
# - [powershell://Siteinfo]
# - [powershell://generate_windows_update_logs]
# - [monitor://$SPLUNK_HOME\var\log\Splunk_TA_windows\WindowsUpdate.log]
# - Windows Version Considerations:
# - A couple of the inputs are dependent on the OS Versions. Below
# is an input section to possibly update depending on the
# OS Version you are deploying these inputs too:
# - ## Replication Information ... sections
# - ## Health and Topology ... sections
# - ## Site, Site Link and Subnet Information ... sections
# - This example input has the Windows 8,8.1, Server 2008R2, 2012 and 2012R2 enabled.
# - If target version is Windows 10 and Server 2016 you will need to update it this section.
# ---------------------------------------------------------------------------------------
###### WinEventLog Inputs for Active Directory ######
## Application and Services Logs - DFS Replication
[WinEventLog://DFS Replication]
disabled = 0
renderXml=false
index=wineventlog
## Application and Services Logs - Directory Service
[WinEventLog://Directory Service]
disabled = 0
renderXml=false
index=wineventlog
## Application and Services Logs - File Replication Service
[WinEventLog://File Replication Service]
disabled = 0
renderXml=false
index = wineventlog
## Application and Services Logs - Key Management Service
[WinEventLog://Key Management Service]
disabled = 0
renderXml=false
index = wineventlog
###### WinEventLog Inputs for DNS ######
[WinEventLog://DNS Server]
disabled=0
renderXml=false
index = wineventlog
###### DHCP ######
[monitor://$WINDIR\System32\DHCP]
disabled = 0
whitelist = DhcpSrvLog*
crcSalt = <SOURCE>
sourcetype = DhcpSrvLog
index = msad
###### Monitor Inputs for Active Directory ######
[monitor://$WINDIR\debug\netlogon.log]
sourcetype=MSAD:NT6:Netlogon
disabled=0
index=msad
###### Monitor Inputs for DNS ######
[MonitorNoHandle://$WINDIR\System32\Dns\dns.log]
sourcetype=MSAD:NT6:DNS
disabled=0
index=msad
###### Scripted/Powershell Mod inputs Active Directory ######
## Replication Information NT6
[script://.\bin\runpowershell.cmd nt6-repl-stat.ps1]
source=Powershell
sourcetype=MSAD:NT6:Replication
interval=300
disabled=1
index=msad
## Replication Information 2012r2 and 2016
[powershell://Replication-Stats]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows_dc\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-repl-stats.ps1"
schedule = 0 */5 * ? * *
source = Powershell
sourcetype=MSAD:NT6:Replication
disabled=0
index=msad
## Health and Topology Information Windows (Version 2008) - ** Either this input or [powershell://AD-Health] is needed for the MS Windows AD Objects application
[script://.\bin\runpowershell.cmd nt6-health.ps1]
source=Powershell
sourcetype=MSAD:NT6:Health
interval=300
disabled=1
index=msad
## Health and Topology Information Windows (Version 2012r2 and 2016) - ** Either this input or [script://.\bin\runpowershell.cmd nt6-health.ps1] is needed for the MS Windows AD Objects application
[powershell://AD-Health]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows_dc\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-health.ps1"
schedule = 0 */5 * ? * *
source=Powershell
sourcetype=MSAD:NT6:Health
disabled=0
index=msad
## Site, Site Link and Subnet Information NT6
[script://.\bin\runpowershell.cmd nt6-siteinfo.ps1]
source=Powershell
sourcetype=MSAD:NT6:SiteInfo
interval=3600
disabled=1
index=msad
## Site, Site Link and Subnet Information 2012r2 and 2016
[powershell://Siteinfo]
script = & "$SplunkHome\etc\apps\Splunk_TA_windows_dc\bin\Invoke-MonitoredScript.ps1" -Command ".\powershell\2012r2-siteinfo.ps1"
schedule = 0 15 * ? * *
source = Powershell
sourcetype=MSAD:NT6:SiteInfo
disabled=0
index=msad
##### Scripted Inputs for DNS #####
## DNS Zone Information Collection
[script://.\bin\runpowershell.cmd dns-zoneinfo.ps1]
source=Powershell
sourcetype=MSAD:NT6:DNS-Zone-Information
interval=3600
disabled=0
index=msad
## DNS Health Information Collection
[script://.\bin\runpowershell.cmd dns-health.ps1]
source=Powershell
sourcetype=MSAD:NT6:DNS-Health
interval=3600
disabled=0
index=msad
###### Perfmon Inputs from TA-AD/TA-DNS ######
[perfmon://Processor]
object = Processor
counters = % Processor Time; % User Time; % Privileged Time; Interrupts/sec; % DPC Time; % Interrupt Time; DPCs Queued/sec; DPC Rate; % Idle Time; % C1 Time; % C2 Time; % C3 Time; C1 Transitions/sec; C2 Transitions/sec; C3 Transitions/sec
instances = *
interval = 60
disabled = 0
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://Network_Interface]
object = Network Interface
counters = Bytes Total/sec; Packets/sec; Packets Received/sec; Packets Sent/sec; Current Bandwidth; Bytes Received/sec; Packets Received Unicast/sec; Packets Received Non-Unicast/sec; Packets Received Discarded; Packets Received Errors; Packets Received Unknown; Bytes Sent/sec; Packets Sent Unicast/sec; Packets Sent Non-Unicast/sec; Packets Outbound Discarded; Packets Outbound Errors; Output Queue Length; Offloaded Connections; TCP Active RSC Connections; TCP RSC Coalesced Packets/sec; TCP RSC Exceptions/sec; TCP RSC Average Packet Size
instances = *
interval = 60
disabled = 0
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://DFS_Replicated_Folders]
object = DFS Replicated Folders
counters = Bandwidth Savings Using DFS Replication; RDC Bytes Received; RDC Compressed Size of Files Received; RDC Size of Files Received; RDC Number of Files Received; Compressed Size of Files Received; Size of Files Received; Total Files Received; Deleted Space In Use; Deleted Bytes Cleaned up; Deleted Files Cleaned up; Deleted Bytes Generated; Deleted Files Generated; Updates Dropped; File Installs Retried; File Installs Succeeded; Conflict Folder Cleanups Completed; Conflict Space In Use; Conflict Bytes Cleaned up; Conflict Files Cleaned up; Conflict Bytes Generated; Conflict Files Generated; Staging Space In Use; Staging Bytes Cleaned up; Staging Files Cleaned up; Staging Bytes Generated; Staging Files Generated
instances = *
interval = 30
disabled = 0
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://NTDS]
object = NTDS
counters = DRA Inbound Properties Total/sec; AB Browses/sec; DRA Inbound Objects Applied/sec; DS Threads in Use; AB Client Sessions; DRA Pending Replication Synchronizations; DRA Inbound Object Updates Remaining in Packet; DS Security Descriptor sub-operations/sec; DS Security Descriptor Propagations Events; LDAP Client Sessions; LDAP Active Threads; LDAP Writes/sec; LDAP Searches/sec; DRA Outbound Objects/sec; DRA Outbound Properties/sec; DRA Inbound Values Total/sec; DRA Sync Requests Made; DRA Sync Requests Successful; DRA Sync Failures on Schema Mismatch; DRA Inbound Objects/sec; DRA Inbound Properties Applied/sec; DRA Inbound Properties Filtered/sec; DS Monitor List Size; DS Notify Queue Size; LDAP UDP operations/sec; DS Search sub-operations/sec; DS Name Cache hit rate; DRA Highest USN Issued (Low part); DRA Highest USN Issued (High part); DRA Highest USN Committed (Low part); DRA Highest USN Committed (High part); DS % Writes from SAM; DS % Writes from DRA; DS % Writes from LDAP; DS % Writes from LSA; DS % Writes from KCC; DS % Writes from NSPI; DS % Writes Other; DS Directory Writes/sec; DS % Searches from SAM; DS % Searches from DRA; DS % Searches from LDAP; DS % Searches from LSA; DS % Searches from KCC; DS % Searches from NSPI; DS % Searches Other; DS Directory Searches/sec; DS % Reads from SAM; DS % Reads from DRA; DRA Inbound Values (DNs only)/sec; DRA Inbound Objects Filtered/sec; DS % Reads from LSA; DS % Reads from KCC; DS % Reads from NSPI; DS % Reads Other; DS Directory Reads/sec; LDAP Successful Binds/sec; LDAP Bind Time; SAM Successful Computer Creations/sec: Includes all requests; SAM Machine Creation Attempts/sec; SAM Successful User Creations/sec; SAM User Creation Attempts/sec; SAM Password Changes/sec; SAM Membership Changes/sec; SAM Display Information Queries/sec; SAM Enumerations/sec; SAM Transitive Membership Evaluations/sec; SAM Non-Transitive Membership Evaluations/sec; SAM Domain Local Group Membership Evaluations/sec; SAM Universal Group Membership Evaluations/sec; SAM Global Group Membership Evaluations/sec; SAM GC Evaluations/sec; DRA Inbound Full Sync Objects Remaining; DRA Inbound Bytes Total/sec; DRA Inbound Bytes Not Compressed (Within Site)/sec; DRA Inbound Bytes Compressed (Between Sites, Before Compression)/sec; DRA Inbound Bytes Compressed (Between Sites, After Compression)/sec; DRA Outbound Bytes Total/sec; DRA Outbound Bytes Not Compressed (Within Site)/sec; DRA Outbound Bytes Compressed (Between Sites, Before Compression)/sec; DRA Outbound Bytes Compressed (Between Sites, After Compression)/sec; DS Client Binds/sec; DS Server Binds/sec; DS Client Name Translations/sec; DS Server Name Translations/sec; DS Security Descriptor Propagator Runtime Queue; DS Security Descriptor Propagator Average Exclusion Time; DRA Outbound Objects Filtered/sec; DRA Outbound Values Total/sec; DRA Outbound Values (DNs only)/sec; AB ANR/sec; AB Property Reads/sec; AB Searches/sec; AB Matches/sec; AB Proxy Lookups/sec; ATQ Threads Total; ATQ Threads LDAP; ATQ Threads Other; DRA Inbound Bytes Total Since Boot; DRA Inbound Bytes Not Compressed (Within Site) Since Boot; DRA Inbound Bytes Compressed (Between Sites, Before Compression) Since Boot; DRA Inbound Bytes Compressed (Between Sites, After Compression) Since Boot; DRA Outbound Bytes Total Since Boot; DRA Outbound Bytes Not Compressed (Within Site) Since Boot; DRA Outbound Bytes Compressed (Between Sites, Before Compression) Since Boot; DRA Outbound Bytes Compressed (Between Sites, After Compression) Since Boot; LDAP New Connections/sec; LDAP Closed Connections/sec; LDAP New SSL Connections/sec; DRA Pending Replication Operations; DRA Threads Getting NC Changes; DRA Threads Getting NC Changes Holding Semaphore; DRA Inbound Link Value Updates Remaining in Packet; DRA Inbound Total Updates Remaining in Packet; DS % Writes from NTDSAPI; DS % Searches from NTDSAPI; DS % Reads from NTDSAPI; SAM Account Group Evaluation Latency; SAM Resource Group Evaluation Latency; ATQ Outstanding Queued Requests; ATQ Request Latency; ATQ Estimated Queue Delay; Tombstones Garbage Collected/sec; Phantoms Cleaned/sec; Link Values Cleaned/sec; Tombstones Visited/sec; Phantoms Visited/sec; NTLM Binds/sec; Negotiated Binds/sec; Digest Binds/sec; Simple Binds/sec; External Binds/sec; Fast Binds/sec; Base searches/sec; Subtree searches/sec; Onelevel searches/sec; Database adds/sec; Database modifys/sec; Database deletes/sec; Database recycles/sec; Approximate highest DNT; Transitive operations/sec; Transitive suboperations/sec; Transitive operations milliseconds run
interval = 60
disabled = 0
mode = single
useEnglishOnly=true
index=perfmon
[perfmon://DNS]
object = DNS
counters = Total Query Received; Total Query Received/sec; UDP Query Received; UDP Query Received/sec; TCP Query Received; TCP Query Received/sec; Total Response Sent; Total Response Sent/sec; UDP Response Sent; UDP Response Sent/sec; TCP Response Sent; TCP Response Sent/sec; Recursive Queries; Recursive Queries/sec; Recursive Send TimeOuts; Recursive TimeOut/sec; Recursive Query Failure; Recursive Query Failure/sec; Notify Sent; Zone Transfer Request Received; Zone Transfer Success; Zone Transfer Failure; AXFR Request Received; AXFR Success Sent; IXFR Request Received; IXFR Success Sent; Notify Received; Zone Transfer SOA Request Sent; AXFR Request Sent; AXFR Response Received; AXFR Success Received; IXFR Request Sent; IXFR Response Received; IXFR Success Received; IXFR UDP Success Received; IXFR TCP Success Received; WINS Lookup Received; WINS Lookup Received/sec; WINS Response Sent; WINS Response Sent/sec; WINS Reverse Lookup Received; WINS Reverse Lookup Received/sec; WINS Reverse Response Sent; WINS Reverse Response Sent/sec; Dynamic Update Received; Dynamic Update Received/sec; Dynamic Update NoOperation; Dynamic Update NoOperation/sec; Dynamic Update Written to Database; Dynamic Update Written to Database/sec; Dynamic Update Rejected; Dynamic Update TimeOuts; Dynamic Update Queued; Secure Update Received; Secure Update Received/sec; Secure Update Failure; Database Node Memory; Record Flow Memory; Caching Memory; UDP Message Memory; TCP Message Memory; Nbstat Memory; Unmatched Responses Received
interval = 60
disabled = 0
mode = single
useEnglishOnly=true
index=perfmon

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

@ -0,0 +1,10 @@
[<stanza name>]
title = <string>
type = <string>
stacks = <string>
description = <string>
repo = <string>
branch = <string>
tags = <string>
apps = <string>
path = <string>

@ -0,0 +1,8 @@
[<stanza name>]
blacklisted_apps = <string>
blacklisted_conffiles = <string>
blacklisted_stanzas = <string>
blacklisted_roles = <string>
blacklisted_users = <string>
theme = <string>
is_configured = <boolean>

@ -0,0 +1,8 @@
[<stanza name>]
title = <string>
author = <string>
sharing = <string>
roles = <string>
description = <string>
actions = <string>
modified = <string>

@ -0,0 +1,10 @@
[<stanza name>]
title = <string>
type = <string>
stacks = <string>
description = <string>
repo = <string>
branch = <string>
tags = <string>
apps = <string>
path = <string>

@ -0,0 +1,6 @@
# this file is generated by @splunk/create automatically
# please do not edit it
[base]
splunk_create_version = <string>
splunk_create_type = <string>

@ -0,0 +1,8 @@
[<stanza name>]
apav = <boolean>
experience = <string>
version = <string>
owner = <string>
sharing = <string>
tags = <string>
roles = <string>

@ -0,0 +1,8 @@
[<stanza name>]
title = <string>
author = <string>
sharing = <string>
roles = <string>
description = <string>
actions = <string>
modified = <string>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#30333b"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#f5f5f5"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#30333b"><path d="M14 7C14.5523 7 15 7.44772 15 8V13H13V8C13 7.44772 13.4477 7 14 7Z"></path><path d="M11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10V13H11V10Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2.97437H18.5C19.8807 2.97437 21 4.09365 21 5.47437V14.4744C21 15.8551 19.8807 16.9744 18.5 16.9744H15V19H17C17.5523 19 18 19.4477 18 20C18 20.5523 17.5523 21 17 21H7C6.44772 21 6 20.5523 6 20C6 19.4477 6.44772 19 7 19H9V16.9744H5.5C4.11929 16.9744 3 15.8551 3 14.4744V5.47437C3 4.09365 4.11929 2.97437 5.5 2.97437ZM11 19H13V17H11V19ZM5.5 4.97437C5.22386 4.97437 5 5.19822 5 5.47437V14.4744C5 14.7505 5.22386 14.9744 5.5 14.9744H18.5C18.7761 14.9744 19 14.7505 19 14.4744V5.47437C19 5.19822 18.7761 4.97437 18.5 4.97437H5.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 939 B

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#f5f5f5"><path d="M14 7C14.5523 7 15 7.44772 15 8V13H13V8C13 7.44772 13.4477 7 14 7Z"></path><path d="M11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10V13H11V10Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2.97437H18.5C19.8807 2.97437 21 4.09365 21 5.47437V14.4744C21 15.8551 19.8807 16.9744 18.5 16.9744H15V19H17C17.5523 19 18 19.4477 18 20C18 20.5523 17.5523 21 17 21H7C6.44772 21 6 20.5523 6 20C6 19.4477 6.44772 19 7 19H9V16.9744H5.5C4.11929 16.9744 3 15.8551 3 14.4744V5.47437C3 4.09365 4.11929 2.97437 5.5 2.97437ZM11 19H13V17H11V19ZM5.5 4.97437C5.22386 4.97437 5 5.19822 5 5.47437V14.4744C5 14.7505 5.22386 14.9744 5.5 14.9744H18.5C18.7761 14.9744 19 14.7505 19 14.4744V5.47437C19 5.19822 18.7761 4.97437 18.5 4.97437H5.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#1f2126"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#f2f1f1"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#f5f5f5"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5 11.8652C15.5 13.7982 13.933 15.3652 12 15.3652C10.067 15.3652 8.5 13.7982 8.5 11.8652C8.5 9.93224 10.067 8.36523 12 8.36523C13.933 8.36523 15.5 9.93224 15.5 11.8652ZM13.5 11.8652C13.5 12.6937 12.8284 13.3652 12 13.3652C11.1716 13.3652 10.5 12.6937 10.5 11.8652C10.5 11.0368 11.1716 10.3652 12 10.3652C12.8284 10.3652 13.5 11.0368 13.5 11.8652Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M10.377 1.86523C9.70725 1.86523 9.11867 2.3092 8.93468 2.95315L8.24602 5.36348L5.8143 4.75472C5.16462 4.59208 4.48585 4.87982 4.15099 5.45982L2.52814 8.27067C2.19328 8.85067 2.28348 9.58237 2.74916 10.0637L4.49223 11.8652L2.74916 13.6668C2.28348 14.1481 2.19328 14.8798 2.52814 15.4598L4.15099 18.2707C4.48585 18.8507 5.16463 19.1384 5.8143 18.9758L8.24603 18.367L8.93468 20.7773C9.11867 21.4213 9.70725 21.8652 10.377 21.8652H13.6227C14.2924 21.8652 14.881 21.4213 15.065 20.7773L15.7536 18.367L18.1853 18.9758C18.835 19.1384 19.5138 18.8507 19.8486 18.2707L21.4715 15.4598C21.8064 14.8798 21.7162 14.1481 21.2505 13.6668L19.5074 11.8652L21.2505 10.0637C21.7162 9.58237 21.8064 8.85067 21.4715 8.27067L19.8486 5.45981C19.5138 4.87982 18.835 4.59208 18.1853 4.75472L15.7536 5.36348L15.065 2.95315C14.881 2.3092 14.2924 1.86523 13.6227 1.86523H10.377ZM9.9303 6.74859L10.7541 3.86523H13.2455L14.0693 6.74859L14.4619 6.94548C14.6571 7.04343 14.8459 7.15272 15.0272 7.27252L15.3944 7.51513L18.3052 6.78644L19.5509 8.94405L17.4647 11.1002L17.4903 11.5384C17.4966 11.6465 17.4998 11.7554 17.4998 11.8652C17.4998 11.9751 17.4966 12.084 17.4903 12.192L17.4647 12.6303L19.5509 14.7864L18.3052 16.9441L15.3943 16.2154L15.0272 16.458C14.8459 16.5778 14.6571 16.687 14.4619 16.785L14.0693 16.9819L13.2455 19.8652H10.7541L9.9303 16.9819L9.53778 16.785C9.34251 16.687 9.15379 16.5778 8.97249 16.458L8.6053 16.2154L5.69446 16.944L4.44877 14.7864L6.53494 12.6303L6.50934 12.192C6.50303 12.084 6.49982 11.9751 6.49982 11.8652C6.49982 11.7554 6.50303 11.6465 6.50934 11.5384L6.53494 11.1002L4.44877 8.94405L5.69446 6.78644L8.60528 7.51513L8.97247 7.27252C9.15377 7.15272 9.3425 7.04343 9.53778 6.94548L9.9303 6.74859Z"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 3000 3000"><path fill="none" d="M0 0h3000v3000H0z"/><path fill="#973051" d="M1584.17 2452.38v-238.952h-231.816v259.207a190.201 190.201 0 0 1-186.936 155.106v67.622h608.374v-67.622a190.2 190.2 0 0 1-189.622-175.361Z" class="color5b4dac svgShape"/><path fill="none" d="M480.519 930.774h2015.36v1318.26H480.519z"/><path fill="#b23a60" d="M480.519 930.774h2015.36v1318.26H480.519z" class="color7d69e2 svgShape"/><path fill="none" d="M579.906 1030.16h1816.58v1119.49H579.906z"/><path fill="#feedf3" d="M579.906 1030.16h1816.58v1119.49H579.906z" class="colord7d0f9 svgShape"/><path fill="none" d="M1584.17 2452.38v-238.952h-231.816v259.207a190.201 190.201 0 0 1-186.936 155.106v67.622h608.374v-67.622a190.2 190.2 0 0 1-189.622-175.361ZM1580.76 1936.62a28.042 28.042 0 0 0-28.042-28.042h-206.263a28.043 28.043 0 0 0-28.042 28.042v.003a28.04 28.04 0 0 0 28.042 28.043h206.263a28.042 28.042 0 0 0 28.042-28.043v-.003Z"/><path fill="#b23a60" d="M1580.76 1936.62a28.042 28.042 0 0 0-28.042-28.042h-206.263a28.043 28.043 0 0 0-28.042 28.042v.003a28.04 28.04 0 0 0 28.042 28.043h206.263a28.042 28.042 0 0 0 28.042-28.043v-.003Z" class="color7d69e2 svgShape"/><path fill="none" d="m917.478 1587.78-123.179 135.675c-19.996 22.025-18.352 56.091 3.674 76.088 22.025 19.997 56.091 18.352 76.088-3.673l116.171-127.956 116.17 127.956c19.997 22.025 54.063 23.67 76.088 3.673 22.026-19.997 23.67-54.063 3.674-76.088l-123.179-135.675 123.179-135.675c19.996-22.026 18.352-56.092-3.674-76.089-22.025-19.996-56.091-18.352-76.088 3.674l-116.17 127.956-116.171-127.956c-19.997-22.026-54.063-23.67-76.088-3.674-22.026 19.997-23.67 54.063-3.674 76.089l123.179 135.675Z"/><path fill="#b23a60" d="m917.478 1587.78-123.179 135.675c-19.996 22.025-18.352 56.091 3.674 76.088 22.025 19.997 56.091 18.352 76.088-3.673l116.171-127.956 116.17 127.956c19.997 22.025 54.063 23.67 76.088 3.673 22.026-19.997 23.67-54.063 3.674-76.088l-123.179-135.675 123.179-135.675c19.996-22.026 18.352-56.092-3.674-76.089-22.025-19.996-56.091-18.352-76.088 3.674l-116.17 127.956-116.171-127.956c-19.997-22.026-54.063-23.67-76.088-3.674-22.026 19.997-23.67 54.063-3.674 76.089l123.179 135.675Z" class="color7d69e2 svgShape"/><path fill="none" d="m1861 1587.78-123.179 135.675c-19.997 22.025-18.352 56.091 3.673 76.088 22.026 19.997 56.092 18.352 76.089-3.673l116.17-127.956 116.171 127.956c19.997 22.025 54.062 23.67 76.088 3.673 22.025-19.997 23.67-54.063 3.673-76.088l-123.179-135.675 123.179-135.675c19.997-22.026 18.352-56.092-3.673-76.089-22.026-19.996-56.091-18.352-76.088 3.674l-116.171 127.956-116.17-127.956c-19.997-22.026-54.063-23.67-76.089-3.674-22.025 19.997-23.67 54.063-3.673 76.089L1861 1587.78Z"/><path fill="#b23a60" d="m1861 1587.78-123.179 135.675c-19.997 22.025-18.352 56.091 3.673 76.088 22.026 19.997 56.092 18.352 76.089-3.673l116.17-127.956 116.171 127.956c19.997 22.025 54.062 23.67 76.088 3.673 22.025-19.997 23.67-54.063 3.673-76.088l-123.179-135.675 123.179-135.675c19.997-22.026 18.352-56.092-3.673-76.089-22.026-19.996-56.091-18.352-76.088 3.674l-116.171 127.956-116.17-127.956c-19.997-22.026-54.063-23.67-76.089-3.674-22.025 19.997-23.67 54.063-3.673 76.089L1861 1587.78ZM1460.14 309.272l524.175 840.251H935.965l524.176-840.251Z" class="color7d69e2 svgShape"/><path fill="#feedf3" fill-rule="nonzero" d="m1425.82 908.045 92.108 3.698 3.164-369.038-121.123-4.863 25.851 370.203Zm113.524 119.574c-.563-18.326-7.041-33.613-19.436-45.859-12.394-12.247-27.589-18.731-45.583-19.454-17.994-.722-32.827 4.557-44.5 15.837-11.673 11.281-17.228 26.084-16.665 44.41.562 18.327 7.041 33.613 19.435 45.86 12.395 12.246 27.589 18.731 45.583 19.453 17.995.722 32.828-4.557 44.501-15.837 11.672-11.281 17.227-26.084 16.665-44.41Z" class="colord7d0f9 svgShape"/><path fill="#feedf3" d="M2764.83 1553.19c53.743 0 97.375 43.633 97.375 97.375 0 53.743-43.632 97.375-97.375 97.375s-97.375-43.632-97.375-97.375c0-53.742 43.632-97.375 97.375-97.375ZM235.18 1162.295c53.743 0 97.375 43.632 97.375 97.375s-43.632 97.375-97.375 97.375-97.375-43.632-97.375-97.375 43.632-97.375 97.375-97.375Zm729.2-463.737c22.675 0 41.085 18.409 41.085 41.084 0 22.675-18.41 41.085-41.085 41.085s-41.084-18.41-41.084-41.085 18.409-41.084 41.084-41.084Zm1264.37-189.02c41.085 0 74.441 33.356 74.441 74.441s-33.356 74.441-74.441 74.441-74.441-33.356-74.441-74.441 33.356-74.441 74.441-74.441ZM684.83 304.635c41.961 0 76.029 34.067 76.029 76.029 0 41.962-34.068 76.029-76.029 76.029-41.962 0-76.03-34.067-76.03-76.029 0-41.962 34.068-76.029 76.03-76.029Z" class="colord7d0f9 svgShape"/></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#1f2126"><path d="M14 7C14.5523 7 15 7.44772 15 8V13H13V8C13 7.44772 13.4477 7 14 7Z"></path><path d="M11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10V13H11V10Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2.97437H18.5C19.8807 2.97437 21 4.09365 21 5.47437V14.4744C21 15.8551 19.8807 16.9744 18.5 16.9744H15V19H17C17.5523 19 18 19.4477 18 20C18 20.5523 17.5523 21 17 21H7C6.44772 21 6 20.5523 6 20C6 19.4477 6.44772 19 7 19H9V16.9744H5.5C4.11929 16.9744 3 15.8551 3 14.4744V5.47437C3 4.09365 4.11929 2.97437 5.5 2.97437ZM11 19H13V17H11V19ZM5.5 4.97437C5.22386 4.97437 5 5.19822 5 5.47437V14.4744C5 14.7505 5.22386 14.9744 5.5 14.9744H18.5C18.7761 14.9744 19 14.7505 19 14.4744V5.47437C19 5.19822 18.7761 4.97437 18.5 4.97437H5.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 939 B

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2.97437H18.5C19.8807 2.97437 21 4.09365 21 5.47437V14.4744C21 15.8551 19.8807 16.9744 18.5 16.9744H15V19H17C17.5523 19 18 19.4477 18 20C18 20.5523 17.5523 21 17 21H7C6.44772 21 6 20.5523 6 20C6 19.4477 6.44772 19 7 19H9V16.9744H5.5C4.11929 16.9744 3 15.8551 3 14.4744V5.47437C3 4.09365 4.11929 2.97437 5.5 2.97437ZM11 19H13V17H11V19ZM5.5 4.97437C5.22386 4.97437 5 5.19822 5 5.47437V14.4744C5 14.7505 5.22386 14.9744 5.5 14.9744H18.5C18.7761 14.9744 19 14.7505 19 14.4744V5.47437C19 5.19822 18.7761 4.97437 18.5 4.97437H5.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 755 B

@ -0,0 +1 @@
<svg aria-hidden="true" height="100%" tabindex="-1" viewBox="0 0 24 24" width="100%" xmlns="http://www.w3.org/2000/svg" class="SVG__StyledSVG-sc-13m0oii-0 gBwlHY" fill="#f5f5f5"><path d="M14 7C14.5523 7 15 7.44772 15 8V13H13V8C13 7.44772 13.4477 7 14 7Z"></path><path d="M11 10C11 9.44772 10.5523 9 10 9C9.44772 9 9 9.44772 9 10V13H11V10Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2.97437H18.5C19.8807 2.97437 21 4.09365 21 5.47437V14.4744C21 15.8551 19.8807 16.9744 18.5 16.9744H15V19H17C17.5523 19 18 19.4477 18 20C18 20.5523 17.5523 21 17 21H7C6.44772 21 6 20.5523 6 20C6 19.4477 6.44772 19 7 19H9V16.9744H5.5C4.11929 16.9744 3 15.8551 3 14.4744V5.47437C3 4.09365 4.11929 2.97437 5.5 2.97437ZM11 19H13V17H11V19ZM5.5 4.97437C5.22386 4.97437 5 5.19822 5 5.47437V14.4744C5 14.7505 5.22386 14.9744 5.5 14.9744H18.5C18.7761 14.9744 19 14.7505 19 14.4744V5.47437C19 5.19822 18.7761 4.97437 18.5 4.97437H5.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 939 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 3000 3000"><path fill="none" d="M0 0h3000v3000H0z"/><path fill="#973051" d="M1584.17 2452.38v-238.952h-231.816v259.207a190.201 190.201 0 0 1-186.936 155.106v67.622h608.374v-67.622a190.2 190.2 0 0 1-189.622-175.361Z" class="color5b4dac svgShape"/><path fill="none" d="M480.519 930.774h2015.36v1318.26H480.519z"/><path fill="#b23a60" d="M480.519 930.774h2015.36v1318.26H480.519z" class="color7d69e2 svgShape"/><path fill="none" d="M579.906 1030.16h1816.58v1119.49H579.906z"/><path fill="#feedf3" d="M579.906 1030.16h1816.58v1119.49H579.906z" class="colord7d0f9 svgShape"/><path fill="none" d="M1584.17 2452.38v-238.952h-231.816v259.207a190.201 190.201 0 0 1-186.936 155.106v67.622h608.374v-67.622a190.2 190.2 0 0 1-189.622-175.361ZM1580.76 1936.62a28.042 28.042 0 0 0-28.042-28.042h-206.263a28.043 28.043 0 0 0-28.042 28.042v.003a28.04 28.04 0 0 0 28.042 28.043h206.263a28.042 28.042 0 0 0 28.042-28.043v-.003Z"/><path fill="#b23a60" d="M1580.76 1936.62a28.042 28.042 0 0 0-28.042-28.042h-206.263a28.043 28.043 0 0 0-28.042 28.042v.003a28.04 28.04 0 0 0 28.042 28.043h206.263a28.042 28.042 0 0 0 28.042-28.043v-.003Z" class="color7d69e2 svgShape"/><path fill="none" d="m917.478 1587.78-123.179 135.675c-19.996 22.025-18.352 56.091 3.674 76.088 22.025 19.997 56.091 18.352 76.088-3.673l116.171-127.956 116.17 127.956c19.997 22.025 54.063 23.67 76.088 3.673 22.026-19.997 23.67-54.063 3.674-76.088l-123.179-135.675 123.179-135.675c19.996-22.026 18.352-56.092-3.674-76.089-22.025-19.996-56.091-18.352-76.088 3.674l-116.17 127.956-116.171-127.956c-19.997-22.026-54.063-23.67-76.088-3.674-22.026 19.997-23.67 54.063-3.674 76.089l123.179 135.675Z"/><path fill="#b23a60" d="m917.478 1587.78-123.179 135.675c-19.996 22.025-18.352 56.091 3.674 76.088 22.025 19.997 56.091 18.352 76.088-3.673l116.171-127.956 116.17 127.956c19.997 22.025 54.063 23.67 76.088 3.673 22.026-19.997 23.67-54.063 3.674-76.088l-123.179-135.675 123.179-135.675c19.996-22.026 18.352-56.092-3.674-76.089-22.025-19.996-56.091-18.352-76.088 3.674l-116.17 127.956-116.171-127.956c-19.997-22.026-54.063-23.67-76.088-3.674-22.026 19.997-23.67 54.063-3.674 76.089l123.179 135.675Z" class="color7d69e2 svgShape"/><path fill="none" d="m1861 1587.78-123.179 135.675c-19.997 22.025-18.352 56.091 3.673 76.088 22.026 19.997 56.092 18.352 76.089-3.673l116.17-127.956 116.171 127.956c19.997 22.025 54.062 23.67 76.088 3.673 22.025-19.997 23.67-54.063 3.673-76.088l-123.179-135.675 123.179-135.675c19.997-22.026 18.352-56.092-3.673-76.089-22.026-19.996-56.091-18.352-76.088 3.674l-116.171 127.956-116.17-127.956c-19.997-22.026-54.063-23.67-76.089-3.674-22.025 19.997-23.67 54.063-3.673 76.089L1861 1587.78Z"/><path fill="#b23a60" d="m1861 1587.78-123.179 135.675c-19.997 22.025-18.352 56.091 3.673 76.088 22.026 19.997 56.092 18.352 76.089-3.673l116.17-127.956 116.171 127.956c19.997 22.025 54.062 23.67 76.088 3.673 22.025-19.997 23.67-54.063 3.673-76.088l-123.179-135.675 123.179-135.675c19.997-22.026 18.352-56.092-3.673-76.089-22.026-19.996-56.091-18.352-76.088 3.674l-116.171 127.956-116.17-127.956c-19.997-22.026-54.063-23.67-76.089-3.674-22.025 19.997-23.67 54.063-3.673 76.089L1861 1587.78ZM1460.14 309.272l524.175 840.251H935.965l524.176-840.251Z" class="color7d69e2 svgShape"/><path fill="#feedf3" fill-rule="nonzero" d="m1425.82 908.045 92.108 3.698 3.164-369.038-121.123-4.863 25.851 370.203Zm113.524 119.574c-.563-18.326-7.041-33.613-19.436-45.859-12.394-12.247-27.589-18.731-45.583-19.454-17.994-.722-32.827 4.557-44.5 15.837-11.673 11.281-17.228 26.084-16.665 44.41.562 18.327 7.041 33.613 19.435 45.86 12.395 12.246 27.589 18.731 45.583 19.453 17.995.722 32.828-4.557 44.501-15.837 11.672-11.281 17.227-26.084 16.665-44.41Z" class="colord7d0f9 svgShape"/><path fill="#feedf3" d="M2764.83 1553.19c53.743 0 97.375 43.633 97.375 97.375 0 53.743-43.632 97.375-97.375 97.375s-97.375-43.632-97.375-97.375c0-53.742 43.632-97.375 97.375-97.375ZM235.18 1162.295c53.743 0 97.375 43.632 97.375 97.375s-43.632 97.375-97.375 97.375-97.375-43.632-97.375-97.375 43.632-97.375 97.375-97.375Zm729.2-463.737c22.675 0 41.085 18.409 41.085 41.084 0 22.675-18.41 41.085-41.085 41.085s-41.084-18.41-41.084-41.085 18.409-41.084 41.084-41.084Zm1264.37-189.02c41.085 0 74.441 33.356 74.441 74.441s-33.356 74.441-74.441 74.441-74.441-33.356-74.441-74.441 33.356-74.441 74.441-74.441ZM684.83 304.635c41.961 0 76.029 34.067 76.029 76.029 0 41.962-34.068 76.029-76.029 76.029-41.962 0-76.03-34.067-76.03-76.029 0-41.962 34.068-76.029 76.03-76.029Z" class="colord7d0f9 svgShape"/></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,105 @@
export const ExportAllIcon = () =>{
return (<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<style>
.cls-1, .cls-2 {
fill: #ffe9f2;
}
.cls-3 {
stroke: #b23a60;
}
.cls-3, .cls-4 {
stroke-width: 3.16px;
}
.cls-3, .cls-4, .cls-2, .cls-5, .cls-6, .cls-7, .cls-8 {
stroke-linecap: round;
stroke-linejoin: round;
}
.cls-3, .cls-4, .cls-7 {
fill: none;
}
.cls-4, .cls-2, .cls-5, .cls-6, .cls-7, .cls-8 {
stroke: #471726;
}
.cls-2, .cls-5, .cls-6, .cls-7, .cls-8 {
stroke-width: 4.74px;
}
.cls-5 {
fill: #e693ae;
}
.cls-6 {
fill: #b23a60;
}
.cls-8 {
fill: #faa0bd;
}
</style>
</defs>
<g>
<g>
<path class="cls-1" d="M450.41,430.3s-14.68-61.66,8.81-93.96c23.49-32.3,1.26-78.53-32.97-91.28,0,0-36.58-8.39-55.71-31.21-19.13-22.82-16.78-98.33-97.32-92.62-80.54,5.7-86.24,76.51-113.43,86.58-27.18,10.07-98.66,1.01-107.39,43.63-8.73,42.62,30.87,41.61,22.82,74.5-8.05,32.89-28.19,68.79-19.46,104.37H450.41Z"/>
<line class="cls-7" x1="462.94" y1="430.3" x2="37.42" y2="430.3"/>
<line class="cls-7" x1="474.58" y1="430.3" x2="489.51" y2="430.3"/>
</g>
<g>
<line class="cls-4" x1="54.97" y1="234.28" x2="75.23" y2="234.28"/>
<line class="cls-4" x1="65.1" y1="224.15" x2="65.1" y2="244.41"/>
</g>
<g>
<line class="cls-3" x1="128.3" y1="155.82" x2="148.57" y2="155.82"/>
<line class="cls-3" x1="138.44" y1="145.68" x2="138.44" y2="165.95"/>
</g>
<g>
<line class="cls-4" x1="410.78" y1="180.48" x2="431.04" y2="180.48"/>
<line class="cls-4" x1="420.91" y1="170.35" x2="420.91" y2="190.61"/>
</g>
<g>
<line class="cls-4" x1="464.44" y1="388.73" x2="484.71" y2="388.73"/>
<line class="cls-4" x1="474.58" y1="378.6" x2="474.58" y2="398.87"/>
</g>
<g>
<line class="cls-3" x1="474.58" y1="295.46" x2="494.84" y2="295.46"/>
<line class="cls-3" x1="484.71" y1="285.32" x2="484.71" y2="305.59"/>
</g>
<g>
<line class="cls-3" x1="266.17" y1="91.83" x2="286.44" y2="91.83"/>
<line class="cls-3" x1="276.31" y1="81.7" x2="276.31" y2="101.96"/>
</g>
<g>
<line class="cls-4" x1="17.16" y1="398.87" x2="37.42" y2="398.87"/>
<line class="cls-4" x1="27.29" y1="388.73" x2="27.29" y2="409"/>
</g>
<g>
<line class="cls-3" x1="65.1" y1="315.8" x2="85.37" y2="315.8"/>
<line class="cls-3" x1="75.23" y1="305.67" x2="75.23" y2="325.94"/>
</g>
</g>
<g>
<path class="cls-8" d="M317.16,218.36l22.66,77.05c.25,.84,.37,1.72,.37,2.6v132.29h-73.72V218.36h50.68Z"/>
<path class="cls-6" d="M294.12,430.3H132.85v-131.35c0-1.51,.18-3.01,.55-4.47l22.49-76.13h161.26l-22.49,76.13c-.37,1.46-.55,2.96-.55,4.47v131.35Z"/>
<path class="cls-5" d="M151.28,190.71c-5.09,0-9.22,6.19-9.22,13.82s4.13,13.82,9.22,13.82h165.87v-27.65H151.28Z"/>
<path class="cls-8" d="M344.8,202.68c0,11.2-9.08,20.29-20.29,20.29h-11.33c-.41,0-.81,.14-1.14,.39l-28.75,22.37c-6.77,5.27-16.51,4.12-21.87-2.58-4.99-6.24-4.49-15.23,1.16-20.88l28.37-28.37c.73-.73,.73-1.9,0-2.63-.35-.35-.82-.54-1.32-.54h-83.06l46.14-25.17c2.98-1.63,6.32-2.48,9.72-2.48h117.37c1.03,0,1.86,.83,1.86,1.86v33.14c0,1.03-.83,1.86-1.86,1.86h-32.25c-1.52,0-2.75,1.23-2.75,2.75h0Z"/>
<path class="cls-6" d="M363.23,153.85h36.86v59.9h-36.86v-59.9Z"/>
<path class="cls-8" d="M294.12,430.3l23.04-23.04,23.04,23.04h-46.08Z"/>
<line class="cls-8" x1="317.16" y1="407.27" x2="317.16" y2="324.75"/>
<g>
<path class="cls-2" d="M190.09,398.05h-8.38c-5.43,0-9.84-4.4-9.84-9.84,0-.23,0-.47,.03-.7l10.95-58.33h6.12l10.95,58.33c.39,5.42-3.69,10.13-9.11,10.51-.23,.02-.47,.03-.7,.03Z"/>
<path class="cls-2" d="M245.22,398.05h-7.95c-5.56,0-10.06-4.51-10.06-10.06,0-.33,.02-.67,.05-1l3.93-39.26h20.13l3.93,39.26c.55,5.53-3.48,10.46-9.01,11.02-.33,.03-.67,.05-1,.05Z"/>
<path class="cls-2" d="M231.18,347.73v-5.03l-10.06-5.03s3.77-50.32,30.19-50.32v60.39h-20.13Z"/>
<path class="cls-2" d="M169.81,312.84h32.17v6.78c0,8.88-7.21,16.09-16.09,16.09h0c-8.88,0-16.09-7.21-16.09-16.09v-6.78h0Z"/>
<line class="cls-6" x1="169.81" y1="312.84" x2="169.81" y2="287.34"/>
<line class="cls-6" x1="185.89" y1="312.84" x2="185.89" y2="291.75"/>
<line class="cls-6" x1="201.98" y1="312.84" x2="201.98" y2="287.34"/>
</g>
</g>
</svg>)
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,939 @@
<!DOCTYPE html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>App Content Manager</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
<style>
.workflowcardaction {
cursor: default !important;
background: transparent !important;
}
.workflowcardaction:hover {
cursor: default !important;
background: transparent !important;
}
.workflowrows {
background: transparent !important;
}
.workflowrows:hover {
background: transparent !important;
}
.notallowedoption {
cursor: 'not-allowed';
}
.sbversion {
line-height: 40px !important;
font-weight: bold !important;
}
.documentation_dark > p {
color: white;
}
.documentation_light > p {
color: #2c2c2c;
}
.partitionButton[disabled] {
background: #feedf3 !important;
color: #dad8d8 !important;
}
.partitionButton {
background: #bd456a !important;
color: #ffffff !important;
}
.workflowcard {
max-width: 600px;
width: 18%;
min-width: 260px;
max-height: 275px;
min-height: 275px;
background-size: cover !important;
background-repeat: no-repeat !important;
background-position: -130px 42px !important;
}
.servercard {
max-width: 600px;
width: 18%;
min-width: 260px;
max-height: 275px;
min-height: 275px;
background-size: contain !important;
background-repeat: no-repeat !important;
background-position: 200px 25px !important;
}
.elemBorder {
background: linear-gradient(
-30deg,
#f99d1c 8.98%,
#f99c1c 9.4%,
#f4781f 21.71%,
#f16221 31.74%,
#f05a22 38.17%,
#ee1d62 64.89%,
#ce0070 76.39%
);
}
.bottomBorder {
background: linear-gradient(
-30deg,
#f99d1c 8.98%,
#f99c1c 9.4%,
#f4781f 21.71%,
#f16221 31.74%,
#f05a22 38.17%,
#ee1d62 64.89%,
#ce0070 76.39%
);
position: relative;
bottom: 0px;
height: 4px;
width: 100%;
display: block;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}
.download-image .download-btn {
border: 1px solid #eee;
background: #ebf8ff;
padding: 10px 20px;
border-radius: 5px;
font-weight: 700;
cursor: pointer;
}
.download-image .download-btn:hover {
opacity: 0.9;
}
.text-updater-node {
height: fit-content;
width: fit-content;
border: 1px solid #eee;
padding: 5px;
border-radius: 5px;
color: white;
}
span:has(
div[class^='SwitchStyles__StyledSome'],
div[class*=' SwitchStyles__StyledSome']
):not([disabled]) {
border-color: #bd456a !important;
background-color: #bd456a !important;
border-radius: 9px !important;
}
*[class^='SwitchStyles__StyledCheckboxClickable']:has(svg):not([disabled]),
*[class*=' SwitchStyles__StyledCheckboxClickable']:has(svg):not([disabled]) {
border-color: #bd456a !important;
background-color: #bd456a !important;
border-radius: 9px !important;
}
*[class^='SwitchStyles__StyledCheckboxClickable'],
*[class*=' SwitchStyles__StyledCheckboxClickable'] {
border-radius: 9px !important;
}
.imgmode:hover {
/* Start the shake animation and make the animation last for 0.5 seconds */
animation: shake 2s, 0.5s, 1s;
/* When the animation is finished, start again */
animation-iteration-count: infinite;
}
@keyframes shake {
0% {
transform: translate(1px, 1px) rotate(0deg);
}
10% {
transform: translate(-1px, -2px) rotate(-1deg);
}
20% {
transform: translate(-3px, 0px) rotate(1deg);
}
30% {
transform: translate(3px, 2px) rotate(0deg);
}
40% {
transform: translate(1px, -1px) rotate(1deg);
}
50% {
transform: translate(-1px, 2px) rotate(-1deg);
}
60% {
transform: translate(-3px, 1px) rotate(0deg);
}
70% {
transform: translate(3px, 1px) rotate(-1deg);
}
80% {
transform: translate(-1px, -1px) rotate(1deg);
}
90% {
transform: translate(1px, 2px) rotate(0deg);
}
100% {
transform: translate(1px, -2px) rotate(-1deg);
}
}
div[class^='HeaderStyles__StyledSubtitle'],
div[class*=' HeaderStyles__StyledSubtitle'] {
text-wrap: wrap !important;
word-wrap: break-word;
}
[aria-selected='true'] > div[class^='TabStyles__StyledUnderline'],
[aria-selected='true'] > div[class*=' TabStyles__StyledUnderline'] {
background-color: #bd456a !important;
width: 3px !important;
}
button[class^='TabStyles__StyledClickable'][disabled],
button[class*='TabStyles__StyledClickable'][disabled] {
cursor: not-allowed;
}
*:not(
div[class^='PopoverStyles__Styled'],
div[class*=' PopoverStyles__Styled'],
div[class^='CardStyles__Styled'],
div[class*=' CardStyles__Styled'],
*[class^='keepshadow'],
*[class*=' keepshadow']
) {
box-shadow: none !important;
}
div[role='main'] > div {
margin: 0px;
}
div[data-view='views/shared/appbar/Master'] {
display: none;
}
div[role='main'] > div > div {
margin: 0px;
}
.clickedcard {
border: 3px #bd456a solid !important;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.maintabimg {
width: 27px;
height: 27px;
}
#maintab > div > button {
width: 140px;
font-size: 14px;
font-weight: normal;
}
.maintabmenu_light[aria-selected='true'] {
border-bottom: 5px #b23a60 solid;
}
.maintabmenu_dark[aria-selected='true'] {
border-bottom: 5px #feedf3 solid;
}
.react-slideshow-container {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
position: relative;
}
.react-slideshow-container .nav {
z-index: 10;
position: absolute;
cursor: pointer;
}
.react-slideshow-container .nav:first-of-type {
left: 0;
}
.react-slideshow-container .nav:last-of-type {
right: 0;
}
.react-slideshow-container .default-nav {
height: 30px;
background: rgba(255, 255, 255, 0.6);
width: 30px;
border: 0;
text-align: center;
color: #fff;
border-radius: 50%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.react-slideshow-container .default-nav:hover,
.react-slideshow-container .default-nav:focus {
background: #fff;
color: #666;
outline: 0;
}
.react-slideshow-container .default-nav.disabled:hover {
cursor: not-allowed;
}
.react-slideshow-container .default-nav:first-of-type {
margin-right: -30px;
border-right: 0;
border-top: 0;
}
.react-slideshow-container .default-nav:last-of-type {
margin-left: -30px;
}
.react-slideshow-container + ul.indicators {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin-top: 20px;
}
.react-slideshow-container + ul.indicators li {
display: inline-block;
position: relative;
width: 7px;
height: 7px;
padding: 5px;
margin: 0;
}
.react-slideshow-container + ul.indicators .each-slideshow-indicator {
border: 0;
opacity: 0.25;
cursor: pointer;
background: transparent;
color: transparent;
}
.react-slideshow-container + ul.indicators .each-slideshow-indicator:before {
position: absolute;
top: 0;
left: 0;
width: 7px;
height: 7px;
border-radius: 50%;
content: '';
background: #000;
text-align: center;
}
.react-slideshow-container + ul.indicators .each-slideshow-indicator:hover,
.react-slideshow-container + ul.indicators .each-slideshow-indicator.active {
opacity: 0.75;
outline: 0;
}
.react-slideshow-fadezoom-wrapper {
width: 100%;
overflow: hidden;
}
.react-slideshow-fadezoom-wrapper .react-slideshow-fadezoom-images-wrap {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.react-slideshow-fadezoom-wrapper .react-slideshow-fadezoom-images-wrap > div {
position: relative;
opacity: 0;
}
.react-slideshow-wrapper .react-slideshow-fade-images-wrap > div[aria-hidden='true'] {
display: none;
}
.react-slideshow-wrapper.slide {
width: 100%;
overflow: hidden;
}
.react-slideshow-wrapper .images-wrap {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.react-slideshow-wrapper .images-wrap > div[aria-hidden='true'] {
display: none;
}
/*REACT FLOW*/
/* this gets exported as style.css and can be used for the default theming */
/* these are the necessary styles for React Flow, they get used by base.css and style.css */
.react-flow__container {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.react-flow__pane {
z-index: 1;
cursor: -webkit-grab;
cursor: grab;
}
.react-flow__pane.selection {
cursor: pointer;
}
.react-flow__pane.dragging {
cursor: -webkit-grabbing;
cursor: grabbing;
}
.react-flow__viewport {
transform-origin: 0 0;
z-index: 2;
pointer-events: none;
}
.react-flow__renderer {
z-index: 4;
}
.react-flow__selection {
z-index: 6;
}
.react-flow__nodesselection-rect:focus,
.react-flow__nodesselection-rect:focus-visible {
outline: none;
}
.react-flow .react-flow__edges {
pointer-events: none;
overflow: visible;
}
.react-flow__edge-path,
.react-flow__connection-path {
stroke: #b1b1b7;
stroke-width: 1;
fill: none;
}
.react-flow__edge {
pointer-events: visibleStroke;
cursor: pointer;
}
.react-flow__edge.animated path {
stroke-dasharray: 5;
-webkit-animation: dashdraw 0.5s linear infinite;
animation: dashdraw 0.5s linear infinite;
}
.react-flow__edge.animated path.react-flow__edge-interaction {
stroke-dasharray: none;
-webkit-animation: none;
animation: none;
}
.react-flow__edge.inactive {
pointer-events: none;
}
.react-flow__edge.selected,
.react-flow__edge:focus,
.react-flow__edge:focus-visible {
outline: none;
}
.react-flow__edge.selected .react-flow__edge-path,
.react-flow__edge:focus .react-flow__edge-path,
.react-flow__edge:focus-visible .react-flow__edge-path {
stroke: #555;
}
.react-flow__edge-textwrapper {
pointer-events: all;
}
.react-flow__edge-textbg {
fill: white;
}
.react-flow__edge .react-flow__edge-text {
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.react-flow__connection {
pointer-events: none;
}
.react-flow__connection .animated {
stroke-dasharray: 5;
-webkit-animation: dashdraw 0.5s linear infinite;
animation: dashdraw 0.5s linear infinite;
}
.react-flow__connectionline {
z-index: 1001;
}
.react-flow__nodes {
pointer-events: none;
transform-origin: 0 0;
}
.react-flow__node {
position: absolute;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
pointer-events: all;
transform-origin: 0 0;
box-sizing: border-box;
cursor: -webkit-grab;
cursor: grab;
}
.react-flow__node.dragging {
cursor: -webkit-grabbing;
cursor: grabbing;
}
.react-flow__nodesselection {
z-index: 3;
transform-origin: left top;
pointer-events: none;
}
.react-flow__nodesselection-rect {
position: absolute;
pointer-events: all;
cursor: -webkit-grab;
cursor: grab;
}
.react-flow__handle {
position: absolute;
pointer-events: none;
min-width: 5px;
min-height: 5px;
width: 6px;
height: 6px;
background: #1a192b;
border: 1px solid white;
border-radius: 100%;
}
.react-flow__handle.connectionindicator {
pointer-events: all;
cursor: crosshair;
}
.react-flow__handle-bottom {
top: auto;
left: 50%;
bottom: -4px;
transform: translate(-50%, 0);
}
.react-flow__handle-top {
left: 50%;
top: -4px;
transform: translate(-50%, 0);
}
.react-flow__handle-left {
top: 50%;
left: -4px;
transform: translate(0, -50%);
}
.react-flow__handle-right {
right: -4px;
top: 50%;
transform: translate(0, -50%);
}
.react-flow__edgeupdater {
cursor: move;
pointer-events: all;
}
.react-flow__panel {
position: absolute;
z-index: 5;
margin: 15px;
}
.react-flow__panel.top {
top: 0;
}
.react-flow__panel.bottom {
bottom: 0;
}
.react-flow__panel.left {
left: 0;
}
.react-flow__panel.right {
right: 0;
}
.react-flow__panel.center {
left: 50%;
transform: translateX(-50%);
}
.react-flow__attribution {
font-size: 10px;
background: rgba(255, 255, 255, 0.5);
padding: 2px 3px;
margin: 0;
}
.react-flow__attribution a {
text-decoration: none;
color: #999;
}
@-webkit-keyframes dashdraw {
from {
stroke-dashoffset: 10;
}
}
@keyframes dashdraw {
from {
stroke-dashoffset: 10;
}
}
.react-flow__edgelabel-renderer {
position: absolute;
width: 100%;
height: 100%;
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.react-flow__edge.updating .react-flow__edge-path {
stroke: #777;
}
.react-flow__edge-text {
font-size: 10px;
}
.react-flow__node.selectable:focus,
.react-flow__node.selectable:focus-visible {
outline: none;
}
.react-flow__node-default,
.react-flow__node-input,
.react-flow__node-output,
.react-flow__node-group {
padding: 10px;
border-radius: 3px;
width: 150px;
font-size: 12px;
color: #222;
text-align: center;
border-width: 1px;
border-style: solid;
border-color: #1a192b;
background-color: white;
}
.react-flow__node-default.selectable:hover,
.react-flow__node-input.selectable:hover,
.react-flow__node-output.selectable:hover,
.react-flow__node-group.selectable:hover {
box-shadow: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
}
.react-flow__node-default.selectable.selected,
.react-flow__node-default.selectable:focus,
.react-flow__node-default.selectable:focus-visible,
.react-flow__node-input.selectable.selected,
.react-flow__node-input.selectable:focus,
.react-flow__node-input.selectable:focus-visible,
.react-flow__node-output.selectable.selected,
.react-flow__node-output.selectable:focus,
.react-flow__node-output.selectable:focus-visible,
.react-flow__node-group.selectable.selected,
.react-flow__node-group.selectable:focus,
.react-flow__node-group.selectable:focus-visible {
box-shadow: 0 0 0 0.5px #1a192b;
}
.react-flow__node-group {
background-color: rgba(240, 240, 240, 0.25);
}
.react-flow__nodesselection-rect,
.react-flow__selection {
background: rgba(0, 89, 220, 0.08);
border: 1px dotted rgba(0, 89, 220, 0.8);
}
.react-flow__nodesselection-rect:focus,
.react-flow__nodesselection-rect:focus-visible,
.react-flow__selection:focus,
.react-flow__selection:focus-visible {
outline: none;
}
.react-flow__controls {
box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.08);
}
.react-flow__controls-button {
border: none;
background: #fefefe;
border-bottom: 1px solid #eee;
box-sizing: content-box;
display: flex;
justify-content: center;
align-items: center;
width: 16px;
height: 16px;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
padding: 5px;
}
.react-flow__controls-button:hover {
background: #f4f4f4;
}
.react-flow__controls-button svg {
width: 100%;
max-width: 12px;
max-height: 12px;
}
.react-flow__controls-button:disabled {
pointer-events: none;
}
.react-flow__controls-button:disabled svg {
fill-opacity: 0.4;
}
.react-flow__minimap {
background-color: #fff;
}
.react-flow__resize-control {
position: absolute;
}
.react-flow__resize-control.left,
.react-flow__resize-control.right {
cursor: ew-resize;
}
.react-flow__resize-control.top,
.react-flow__resize-control.bottom {
cursor: ns-resize;
}
.react-flow__resize-control.top.left,
.react-flow__resize-control.bottom.right {
cursor: nwse-resize;
}
.react-flow__resize-control.bottom.left,
.react-flow__resize-control.top.right {
cursor: nesw-resize;
}
/* handle styles */
.react-flow__resize-control.handle {
width: 4px;
height: 4px;
border: 1px solid #fff;
border-radius: 1px;
background-color: #3367d9;
transform: translate(-50%, -50%);
}
.react-flow__resize-control.handle.left {
left: 0;
top: 50%;
}
.react-flow__resize-control.handle.right {
left: 100%;
top: 50%;
}
.react-flow__resize-control.handle.top {
left: 50%;
top: 0;
}
.react-flow__resize-control.handle.bottom {
left: 50%;
top: 100%;
}
.react-flow__resize-control.handle.top.left {
left: 0;
}
.react-flow__resize-control.handle.bottom.left {
left: 0;
}
.react-flow__resize-control.handle.top.right {
left: 100%;
}
.react-flow__resize-control.handle.bottom.right {
left: 100%;
}
/* line styles */
.react-flow__resize-control.line {
border-color: #3367d9;
border-width: 0;
border-style: solid;
}
.react-flow__resize-control.line.left,
.react-flow__resize-control.line.right {
width: 1px;
transform: translate(-50%, 0);
top: 0;
height: 100%;
}
.react-flow__resize-control.line.left {
left: 0;
border-left-width: 1px;
}
.react-flow__resize-control.line.right {
left: 100%;
border-right-width: 1px;
}
.react-flow__resize-control.line.top,
.react-flow__resize-control.line.bottom {
height: 1px;
transform: translate(0, -50%);
left: 0;
width: 100%;
}
.react-flow__resize-control.line.top {
top: 0;
border-top-width: 1px;
}
.react-flow__resize-control.line.bottom {
border-bottom-width: 1px;
top: 100%;
}
.react-js-cron {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
}
.react-js-cron > div,
.react-js-cron-field {
display: flex;
align-items: center;
}
.react-js-cron-field {
margin-bottom: 10px;
}
.react-js-cron-field > span {
margin-left: 5px;
}
div.react-js-cron-select {
margin-left: 5px;
}
.react-js-cron-select.react-js-cron-select-no-prefix {
margin-left: 0;
}
div.react-js-cron-error .react-js-cron-select .ant-select-selector {
border-color: #ff4d4f;
background: #fff6f6;
}
div.react-js-cron-custom-select {
min-width: 70px;
z-index: 1;
}
div.react-js-cron-error div.react-js-cron-custom-select {
background: #fff6f6;
}
div.react-js-cron-select.react-js-cron-custom-select.ant-select
div.ant-select-selector {
padding-left: 11px;
padding-right: 30px;
}
.react-js-cron-read-only
div.react-js-cron-select.react-js-cron-custom-select.ant-select
div.ant-select-selector {
padding-right: 11px;
}
div.react-js-cron-custom-select .ant-select-selection-search {
width: 0 !important;
margin: 0 !important;
}
div.react-js-cron-custom-select .ant-select-selection-placeholder {
position: static;
top: 50%;
right: auto;
left: auto;
transform: none;
transition: none;
opacity: 1;
color: inherit;
}
.react-js-cron-week-days-placeholder
.react-js-cron-custom-select
.ant-select-selection-placeholder,
.react-js-cron-month-days-placeholder
.react-js-cron-custom-select
.ant-select-selection-placeholder {
opacity: 0.4;
}
.react-js-cron-custom-select-dropdown {
min-width: 0 !important;
width: 174px !important;
}
.react-js-cron-custom-select-dropdown .rc-virtual-list {
max-height: none !important;
}
.react-js-cron-custom-select-dropdown-grid .rc-virtual-list-holder {
max-height: initial !important;
}
.react-js-cron-custom-select-dropdown-grid .rc-virtual-list-holder-inner {
display: grid !important;
grid-template-columns: repeat(4, 1fr);
}
.react-js-cron-custom-select-dropdown-grid
.rc-virtual-list-holder-inner
.ant-select-item-option-content {
text-align: center;
}
.react-js-cron-custom-select-dropdown-hours-twelve-hour-clock {
width: 260px !important;
}
.react-js-cron-custom-select-dropdown-minutes-large {
width: 300px !important;
}
.react-js-cron-custom-select-dropdown-minutes-large .rc-virtual-list-holder-inner {
grid-template-columns: repeat(6, 1fr);
}
.react-js-cron-custom-select-dropdown-minutes-medium {
width: 220px !important;
}
.react-js-cron-custom-select-dropdown-minutes-medium .rc-virtual-list-holder-inner {
grid-template-columns: repeat(5, 1fr);
}
.react-js-cron-period > span:first-child {
margin-left: 0 !important;
}
.react-js-cron-period
.react-js-cron-select.ant-select-single.ant-select-open
.ant-select-selection-item {
opacity: 1;
}
.react-js-cron-select-dropdown-period {
min-width: 0 !important;
width: auto !important;
}
.react-js-cron-clear-button {
margin-left: 10px;
margin-bottom: 10px;
}
.react-js-cron-disabled .react-js-cron-select.ant-select-disabled {
background: #f5f5f5;
}
div.react-js-cron-select.react-js-cron-custom-select.ant-select
div.ant-select-selector
> .ant-select-selection-overflow {
align-items: center;
flex: initial;
}
.ant-btn-dangerous {
background: #3d3f44 !important;
}
</style>
</head>
<body>
<script src="${make_url('/config?autoload=1')}" crossorigin="use-credentials"></script>
<script src="${make_url('/static/js/i18n.js')}"></script>
<script src="${make_url('/i18ncatalog?autoload=1')}"></script>
<script>
__splunkd_partials__ = ${json_decode(splunkd)};
</script>
<% page_path = "/static/app/appcontentmanager/pages/start.js" %>
<script src="${make_url(page_path)}"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,158 @@
import requests
import logging
import os
import json
import sys
import logging.handlers
from splunk.persistconn.application import PersistentServerConnectionApplication
import signal
import subprocess
'''
# !!!!! DEBUG !!!!
sys.path.append(os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','SA-VSCode','bin'))
import splunk_debug as dbg
dbg.enable_debugging(timeout=25)
#################
'''
splunk_home = os.environ['SPLUNK_HOME']
LOG_LEVEL = logging.INFO
LOG_FILE_NAME = "acms.log"
def setup_logger(): # setup logging
global SPLUNK_HOME, LOG_LEVEL, LOG_FILE_NAME
if 'SPLUNK_HOME' in os.environ:
SPLUNK_HOME = os.environ['SPLUNK_HOME']
log_format = "%(asctime)s %(levelname)-s\t%(module)s[%(process)d]:%(lineno)d - %(message)s"
logger = logging.getLogger('v')
logger.setLevel(LOG_LEVEL)
l = logging.handlers.RotatingFileHandler(os.path.join(SPLUNK_HOME, 'var', 'log', 'splunk', LOG_FILE_NAME), mode='a', maxBytes=1000000, backupCount=2)
l.setFormatter(logging.Formatter(log_format))
logger.addHandler(l)
# ..and (optionally) output to console
logH = logging.StreamHandler()
logH.setFormatter(logging.Formatter(fmt=log_format))
# logger.addHandler(logH)
logger.propagate = False
return logger
logger = setup_logger()
class Stack_Connect(PersistentServerConnectionApplication):
def __init__(self, _command_line, _command_arg):
super(PersistentServerConnectionApplication, self).__init__()
# Handle a syncronous from splunkd.
def handle(self, in_string):
"""
Called for a simple synchronous request.
@param in_string: request data passed in
@rtype: string or dict
@return: String to return in response. If a dict was passed in,
it will automatically be JSON encoded before being returned.
"""
#dbg.set_breakpoint()
acs_url = "https://admin.splunk.com/"
# Parse the arguments
args = self.parse_in_string(in_string)
global user
user = args['session']['user']
token = ""
if "token" in args['form_parameters'] :
token = args['form_parameters']['token']
stackname = ""
if "stackname" in args['form_parameters'] :
stackname = args['form_parameters']['stackname']
if "stg-" in stackname :
acs_url = "https://staging.admin.splunk.com/"
if "-shw" in stackname :
acs_url = "https://staging.admin.splunk.com/"
if ".stg" in stackname :
acs_url = "https://staging.admin.splunk.com/"
stackname = stackname.replace(".stg","")
headers = {
'Authorization': 'Bearer '+ token,
'User-Agent': 'ACS-Helper'
}
response = requests.get(acs_url+stackname+'/adminconfig/v2/status', headers=headers)
if response.status_code == 404 :
return {'payload': "", 'status': 404}
elif response.status_code == 401 :
return {'payload': "", 'status': 401}
elif response.status_code == 200 :
payload = json.loads(response.text)
payload["infrastructure"]["APAV"] = "1"
return {'payload': payload, 'status': 200}
return {'payload': "", 'status': response.status_code}
def handleStream(self, handle, in_string):
"""
For future use
"""
raise NotImplementedError(
"PersistentServerConnectionApplication.handleStream")
def done(self):
"""
Virtual method which can be optionally overridden to receive a
callback after the request completes.
"""
pass
def convert_to_dict(self, query):
"""
Create a dictionary containing the parameters.
"""
parameters = {}
for key, val in query:
# If the key is already in the list, but the existing entry isn't a list then make the
# existing entry a list and add thi one
if key in parameters and not isinstance(parameters[key], list):
parameters[key] = [parameters[key], val]
# If the entry is already included as a list, then just add the entry
elif key in parameters:
parameters[key].append(val)
# Otherwise, just add the entry
else:
parameters[key] = val
return parameters
def parse_in_string(self, in_string):
"""
Parse the in_string
"""
params = json.loads(in_string)
params['method'] = params['method'].lower()
params['form_parameters'] = self.convert_to_dict(params.get('form', []))
params['query_parameters'] = self.convert_to_dict(params.get('query', []))
return params

@ -0,0 +1,337 @@
import requests
import logging
import os
import json
import sys
import logging.handlers
from splunk.persistconn.application import PersistentServerConnectionApplication
import signal
import subprocess
import tempfile
import tarfile
import re
import splunk.clilib.cli_common
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
'''
# !!!!! DEBUG !!!!
sys.path.append(os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','SA-VSCode','bin'))
import splunk_debug as dbg
dbg.enable_debugging(timeout=25)
#################
'''
splunk_home = os.environ['SPLUNK_HOME']
LOG_LEVEL = logging.INFO
LOG_FILE_NAME = "acms.log"
def result_errors(msg):
return (msg["level"] == "ERROR" or msg["level"] == "CRITICAL")
def convertResponse_to_json(response,stackname):
resp = {}
resp["stack"] = stackname
resp["user"] = user
resp["response"] = {}
resp["response"]["status_code"] = response.status_code
resp["response"]["text"] = response.text
resp["request"] = {}
resp["request"]["headers"] = response.request.headers.__dict__['_store']
resp["request"]["headers"]["authorization"] = list(["Authorization","xxxxx xxxxxxx"])
if response.request.body != None :
resp["request"]["body"] = response.request.body
else :
resp["request"]["body"] = ""
resp["request"]["method"] = response.request.method
resp["request"]["url"] = response.request.url
return resp
def setup_logger(): # setup logging
global SPLUNK_HOME, LOG_LEVEL, LOG_FILE_NAME
if 'SPLUNK_HOME' in os.environ:
SPLUNK_HOME = os.environ['SPLUNK_HOME']
log_format = "%(asctime)s %(levelname)-s\t%(module)s[%(process)d]:%(lineno)d - %(message)s"
logger = logging.getLogger('v')
logger.setLevel(LOG_LEVEL)
l = logging.handlers.RotatingFileHandler(os.path.join(SPLUNK_HOME, 'var', 'log', 'splunk', LOG_FILE_NAME), mode='a', maxBytes=1000000, backupCount=2)
l.setFormatter(logging.Formatter(log_format))
logger.addHandler(l)
# ..and (optionally) output to console
logH = logging.StreamHandler()
logH.setFormatter(logging.Formatter(fmt=log_format))
# logger.addHandler(logH)
logger.propagate = False
return logger
logger = setup_logger()
def list_apps(acs_url,stackname,headers,experience,logger):
returnVal = {}
apps_url = acs_url+stackname+"/adminconfig/v2/apps"
if experience in ["victoria"] :
apps_url = apps_url+"/victoria"
apps_url = apps_url + "?count=0"
response = requests.get(apps_url, headers=headers)
if response.status_code == 200 :
resp = json.loads(response.text)
returnVal["Private"] = resp
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
def list_files(rest_url,stackname,headers,app, logger):
returnVal = {}
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/properties?output_mode=json&count=0",headers=headers, verify=False)
if response.status_code == 200 :
returnVal = json.loads(response.text)
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
def list_content(rest_url,stackname,headers,app,file, logger):
returnVal = {}
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/configs/conf-"+file+"?output_mode=json&count=0",headers=headers, verify=False)
if response.status_code == 200 :
returnVal = [d for d in json.loads(response.text)['entry'] if d['content']['eai:appName']== app]
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
class Stack_Helper(PersistentServerConnectionApplication):
def __init__(self, _command_line, _command_arg):
super(PersistentServerConnectionApplication, self).__init__()
# Handle a syncronous from splunkd.
def handle(self, in_string):
"""
Called for a simple synchronous request.
@param in_string: request data passed in
@rtype: string or dict
@return: String to return in response. If a dict was passed in,
it will automatically be JSON encoded before being returned.
"""
#dbg.set_breakpoint()
if 'slim.__main__' in sys.modules.keys() :
sys.modules.pop('slim.__main__')
sys.modules.pop('slim.partition')
sys.modules.pop('slim.package')
sys.modules.pop('slim.validate')
import slim.__main__
slimmain = slim.__main__.main
acs_url = "https://admin.splunk.com/"
rest_url = ".splunkcloud.com:8089"
# Parse the arguments
args = self.parse_in_string(in_string)
global user
user = args['session']['user']
token = ""
if "token" in args['form_parameters'] :
token = args['form_parameters']['token']
app = ""
if "app" in args['form_parameters'] :
app = args['form_parameters']['app']
experience = ""
if "experience" in args['form_parameters'] :
experience = args['form_parameters']['experience']
action = ""
if "action" in args['form_parameters'] :
action = args['form_parameters']['action']
file = ""
if "file" in args['form_parameters'] :
file = args['form_parameters']['file']
stackname = ""
if "stackname" in args['form_parameters'] :
stackname = args['form_parameters']['stackname']
if "stg-" in stackname :
acs_url = "https://staging.admin.splunk.com/"
rest_url = ".stg.splunkcloud.com:8089"
if "-shw" in stackname :
acs_url = "https://staging.admin.splunk.com/"
rest_url = ".stg.splunkcloud.com:8089"
if ".stg" in stackname :
acs_url = "https://staging.admin.splunk.com/"
stackname = stackname.replace(".stg","")
rest_url = ".stg.splunkcloud.com:8089"
headers = {
'Authorization': 'Bearer '+ token,
'User-Agent': 'ACS-Helper'
}
packages_folder = os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','appcontentmanager','appserver','static','packages')
if action == "list_apps" :
return list_apps(acs_url,stackname,headers, experience,logger)
elif action == "list_files" :
return list_files(rest_url,stackname,headers,app,logger)
elif action == "list_content" :
return list_content(rest_url,stackname,headers,app,file,logger)
elif action == "download_app" :
res = list_files(rest_url,stackname,headers,app,logger)
if res['status'] == 200 :
with tempfile.TemporaryDirectory() as tempdir:
os.mkdir(os.path.join(tempdir,app))
os.mkdir(os.path.join(tempdir,app,"default"))
os.mkdir(os.path.join(tempdir,app,"metadata"))
data_folder_created = False
files = res['payload']['entry']
for file in files :
if file['name'] == 'views' :
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
res = list_content(rest_url,stackname,headers,app,file['name'],logger)
if res['status'] == 200 :
confs = res['payload']
for confFile in confs :
# get dashboard difinition
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/views/"+confFile["name"]+"?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
with open(os.path.join(tempdir,app,"default","data","ui","views",confFile["name"]+".xml"), "w+") as dash:
r = json.loads(response.text)
for d in r['entry'] :
if d['acl']['app'] == app :
dash.write(d['content']['eai:data'])
elif file['name'] == 'nav' :
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
else :
res = list_content(rest_url,stackname,headers,app,file['name'],logger)
if res['status'] == 200 :
confs = res['payload']
c = {}
for confFile in confs :
#c[confFile['name']] = confFile['content']
c[confFile['name']] = {k: v for k, v in confFile['content'].items() if not k.startswith('eai:') and k != "install_source_checksum"}
splunk.clilib.cli_common.writeConfFile(os.path.join(tempdir,app,"default",file['name']+".conf"),c)
# generate nav
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/nav?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
with open(os.path.join(tempdir,app,"default","data","ui","nav","default.xml"), "w+") as nav:
r = json.loads(response.text)
for n in r['entry'] :
if n['acl']['app'] == app :
nav.write(n['content']['eai:data'])
# generate a default.meta conf file
meta = {}
meta[''] = {}
meta['']["access"] = 'read : [ * ], write : [ admin ]'
meta['']["export"] = 'system'
splunk.clilib.cli_common.writeConfFile(os.path.join(tempdir,app,"metadata","default.meta"),meta)
# package the app to appserver/static/packages folder
argv = []
argv.append(re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]))
argv.append("package")
argv.append(os.path.join(tempdir,app))
argv.append("-o")
argv.append(packages_folder)
results = slimmain(argv)
apppath = ""
apppath = results[-1]["msg"].replace('Source package exported to "','').replace('"','')
os.rename(apppath,apppath.replace("tar.gz","spl"))
return {'payload': {'path' : apppath.replace("tar.gz","spl")}, 'status': 200}
return {'payload': "", 'status': 200}
def handleStream(self, handle, in_string):
"""
For future use
"""
raise NotImplementedError(
"PersistentServerConnectionApplication.handleStream")
def done(self):
"""
Virtual method which can be optionally overridden to receive a
callback after the request completes.
"""
pass
def convert_to_dict(self, query):
"""
Create a dictionary containing the parameters.
"""
parameters = {}
for key, val in query:
# If the key is already in the list, but the existing entry isn't a list then make the
# existing entry a list and add thi one
if key in parameters and not isinstance(parameters[key], list):
parameters[key] = [parameters[key], val]
# If the entry is already included as a list, then just add the entry
elif key in parameters:
parameters[key].append(val)
# Otherwise, just add the entry
else:
parameters[key] = val
return parameters
def parse_in_string(self, in_string):
"""
Parse the in_string
"""
params = json.loads(in_string)
params['method'] = params['method'].lower()
params['form_parameters'] = self.convert_to_dict(params.get('form', []))
params['query_parameters'] = self.convert_to_dict(params.get('query', []))
return params

@ -0,0 +1,381 @@
import requests
import logging
import os
import json
import sys
import logging.handlers
import time
from splunk.persistconn.application import PersistentServerConnectionApplication
import signal
import subprocess
import tempfile
import tarfile
import re
import splunk.clilib.cli_common
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
'''
# !!!!! DEBUG !!!!
sys.path.append(os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','SA-VSCode','bin'))
import splunk_debug as dbg
dbg.enable_debugging(timeout=25)
#################
'''
splunk_home = os.environ['SPLUNK_HOME']
LOG_LEVEL = logging.INFO
LOG_FILE_NAME = "acms.log"
def result_errors(msg):
return (msg["level"] == "ERROR" or msg["level"] == "CRITICAL")
def convertResponse_to_json(response,stackname):
resp = {}
resp["stack"] = stackname
resp["user"] = user
resp["response"] = {}
resp["response"]["status_code"] = response.status_code
resp["response"]["text"] = response.text
resp["request"] = {}
resp["request"]["headers"] = response.request.headers.__dict__['_store']
resp["request"]["headers"]["authorization"] = list(["Authorization","xxxxx xxxxxxx"])
if response.request.body != None :
resp["request"]["body"] = response.request.body
else :
resp["request"]["body"] = ""
resp["request"]["method"] = response.request.method
resp["request"]["url"] = response.request.url
return resp
def setup_logger(): # setup logging
global SPLUNK_HOME, LOG_LEVEL, LOG_FILE_NAME
if 'SPLUNK_HOME' in os.environ:
SPLUNK_HOME = os.environ['SPLUNK_HOME']
log_format = "%(asctime)s %(levelname)-s\t%(module)s[%(process)d]:%(lineno)d - %(message)s"
logger = logging.getLogger('v')
logger.setLevel(LOG_LEVEL)
l = logging.handlers.RotatingFileHandler(os.path.join(SPLUNK_HOME, 'var', 'log', 'splunk', LOG_FILE_NAME), mode='a', maxBytes=1000000, backupCount=2)
l.setFormatter(logging.Formatter(log_format))
logger.addHandler(l)
# ..and (optionally) output to console
logH = logging.StreamHandler()
logH.setFormatter(logging.Formatter(fmt=log_format))
# logger.addHandler(logH)
logger.propagate = False
return logger
logger = setup_logger()
def list_apps(acs_url,stackname,headers,experience,logger):
returnVal = {}
apps_url = acs_url+stackname+"/adminconfig/v2/apps"
if experience in ["victoria"] :
apps_url = apps_url+"/victoria"
apps_url = apps_url + "?count=0"
response = requests.get(apps_url, headers=headers)
if response.status_code == 200 :
resp = json.loads(response.text)
returnVal["Private"] = resp
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
def delete_app(acs_url,stackname,headers,experience,app,logger):
returnVal = {}
apps_url = acs_url+stackname+"/adminconfig/v2/apps"
if experience in ["victoria"] :
apps_url = apps_url+"/victoria"
apps_url = apps_url+"/"+app
response = requests.delete(apps_url, headers=headers)
while True:
if response.status_code == 424 :
# retry ..
time.sleep(10)
response = requests.delete(apps_url, headers=headers)
else :
break
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': {"message":response.text, "delete_status":response.status_code}, 'status': 200}
def list_files(rest_url,stackname,headers,app, logger):
returnVal = {}
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/properties?output_mode=json&count=0",headers=headers, verify=False)
if response.status_code == 200 :
returnVal = json.loads(response.text)
for file in returnVal['entry'] :
if file['name'] == 'views' :
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/configs/conf-views?output_mode=json&count=0",headers=headers, verify=False)
file['dashboards'] = [d for d in json.loads(response.text)['entry'] if d['content']['eai:appName']== app]
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
def list_content(rest_url,stackname,headers,app,file, logger):
returnVal = {}
if ".xml" in file :
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/views/"+file.replace(".xml","")+"?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
r = json.loads(response.text)
for d in r['entry'] :
if d['acl']['app'] == app :
returnVal = {"content": d['content']['eai:data']}
elif 'nav.' in file :
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/nav?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
r = json.loads(response.text)
for n in r['entry'] :
if n['acl']['app'] == app :
returnVal = {"content" : d['content']['eai:data']}
else :
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/configs/conf-"+file+"?output_mode=json&count=0",headers=headers, verify=False)
if response.status_code == 200 :
returnVal = [d for d in json.loads(response.text)['entry'] if d['content']['eai:appName']== app]
logger.info(json.dumps(convertResponse_to_json(response, stackname)))
return {'payload': returnVal, 'status': response.status_code}
class Stack_Helper(PersistentServerConnectionApplication):
def __init__(self, _command_line, _command_arg):
super(PersistentServerConnectionApplication, self).__init__()
# Handle a syncronous from splunkd.
def handle(self, in_string):
"""
Called for a simple synchronous request.
@param in_string: request data passed in
@rtype: string or dict
@return: String to return in response. If a dict was passed in,
it will automatically be JSON encoded before being returned.
"""
#dbg.set_breakpoint()
if 'slim.__main__' in sys.modules.keys() :
sys.modules.pop('slim.__main__')
sys.modules.pop('slim.partition')
sys.modules.pop('slim.package')
sys.modules.pop('slim.validate')
import slim.__main__
slimmain = slim.__main__.main
acs_url = "https://admin.splunk.com/"
rest_url = ".splunkcloud.com:8089"
# Parse the arguments
args = self.parse_in_string(in_string)
global user
user = args['session']['user']
token = ""
if "token" in args['form_parameters'] :
token = args['form_parameters']['token']
app = ""
if "app" in args['form_parameters'] :
app = args['form_parameters']['app']
experience = ""
if "experience" in args['form_parameters'] :
experience = args['form_parameters']['experience']
action = ""
if "action" in args['form_parameters'] :
action = args['form_parameters']['action']
file = ""
if "file" in args['form_parameters'] :
file = args['form_parameters']['file']
stackname = ""
if "stackname" in args['form_parameters'] :
stackname = args['form_parameters']['stackname']
if "stg-" in stackname :
acs_url = "https://staging.admin.splunk.com/"
rest_url = ".stg.splunkcloud.com:8089"
if "-shw" in stackname :
acs_url = "https://staging.admin.splunk.com/"
rest_url = ".stg.splunkcloud.com:8089"
if ".stg" in stackname :
acs_url = "https://staging.admin.splunk.com/"
stackname = stackname.replace(".stg","")
rest_url = ".stg.splunkcloud.com:8089"
headers = {
'Authorization': 'Bearer '+ token,
'User-Agent': 'ACS-Helper'
}
packages_folder = os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','appcontentmanager','appserver','static','packages')
if action == "list_apps" :
return list_apps(acs_url,stackname,headers, experience,logger)
elif action == "list_files" :
return list_files(rest_url,stackname,headers,app,logger)
elif action == "list_content" :
return list_content(rest_url,stackname,headers,app,file,logger)
elif action == "delete_app" :
return delete_app(acs_url,stackname,headers, experience,app,logger)
elif action == "download_app" :
res = list_files(rest_url,stackname,headers,app,logger)
if res['status'] == 200 :
with tempfile.TemporaryDirectory() as tempdir:
os.mkdir(os.path.join(tempdir,app))
os.mkdir(os.path.join(tempdir,app,"default"))
os.mkdir(os.path.join(tempdir,app,"metadata"))
data_folder_created = False
files = res['payload']['entry']
for file in files :
if file['name'] == 'views' :
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
res = list_content(rest_url,stackname,headers,app,file['name'],logger)
if res['status'] == 200 :
confs = res['payload']
for confFile in confs :
# get dashboard difinition
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/views/"+confFile["name"]+"?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
with open(os.path.join(tempdir,app,"default","data","ui","views",confFile["name"]+".xml"), "w+") as dash:
r = json.loads(response.text)
for d in r['entry'] :
if d['acl']['app'] == app :
dash.write(d['content']['eai:data'])
elif file['name'] == 'nav' :
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
else :
res = list_content(rest_url,stackname,headers,app,file['name'],logger)
if res['status'] == 200 :
confs = res['payload']
c = {}
for confFile in confs :
#c[confFile['name']] = confFile['content']
c[confFile['name']] = {k: v for k, v in confFile['content'].items() if not k.startswith('eai:') and k != "install_source_checksum"}
splunk.clilib.cli_common.writeConfFile(os.path.join(tempdir,app,"default",file['name']+".conf"),c)
# generate nav
if not data_folder_created :
os.mkdir(os.path.join(tempdir,app,"default","data"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","views"))
os.mkdir(os.path.join(tempdir,app,"default","data","ui","nav"))
data_folder_created = True
response = requests.get("https://"+stackname+rest_url+"/servicesNS/-/"+app+"/data/ui/nav?output_mode=json",headers=headers, verify=False)
if response.status_code == 200 :
with open(os.path.join(tempdir,app,"default","data","ui","nav","default.xml"), "w+") as nav:
r = json.loads(response.text)
for n in r['entry'] :
if n['acl']['app'] == app :
nav.write(n['content']['eai:data'])
# generate a default.meta conf file
meta = {}
meta[''] = {}
meta['']["access"] = 'read : [ * ], write : [ admin ]'
meta['']["export"] = 'system'
splunk.clilib.cli_common.writeConfFile(os.path.join(tempdir,app,"metadata","default.meta"),meta)
# package the app to appserver/static/packages folder
argv = []
argv.append(re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]))
argv.append("package")
argv.append(os.path.join(tempdir,app))
argv.append("-o")
argv.append(packages_folder)
results = slimmain(argv)
apppath = ""
apppath = results[-1]["msg"].replace('Source package exported to "','').replace('"','')
os.rename(apppath,apppath.replace("tar.gz","spl"))
return {'payload': {'path' : apppath.replace("tar.gz","spl")}, 'status': 200}
return {'payload': "", 'status': 200}
def handleStream(self, handle, in_string):
"""
For future use
"""
raise NotImplementedError(
"PersistentServerConnectionApplication.handleStream")
def done(self):
"""
Virtual method which can be optionally overridden to receive a
callback after the request completes.
"""
pass
def convert_to_dict(self, query):
"""
Create a dictionary containing the parameters.
"""
parameters = {}
for key, val in query:
# If the key is already in the list, but the existing entry isn't a list then make the
# existing entry a list and add thi one
if key in parameters and not isinstance(parameters[key], list):
parameters[key] = [parameters[key], val]
# If the entry is already included as a list, then just add the entry
elif key in parameters:
parameters[key].append(val)
# Otherwise, just add the entry
else:
parameters[key] = val
return parameters
def parse_in_string(self, in_string):
"""
Parse the in_string
"""
params = json.loads(in_string)
params['method'] = params['method'].lower()
params['form_parameters'] = self.convert_to_dict(params.get('form', []))
params['query_parameters'] = self.convert_to_dict(params.get('query', []))
return params

@ -0,0 +1,155 @@
import requests
import logging
import os
import json
import sys
import logging.handlers
from splunk.persistconn.application import PersistentServerConnectionApplication
import signal
import subprocess
import tempfile
import tarfile
import re
import splunk.clilib.cli_common
import csv
import re
import boto3
import gzip
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
'''
# !!!!! DEBUG !!!!
sys.path.append(os.path.join(os.environ['SPLUNK_HOME'],'etc','apps','SA-VSCode','bin'))
import splunk_debug as dbg
dbg.enable_debugging(timeout=25)
#################
'''
try: #python3
from urllib.request import urlopen
except: #python2
from urllib2 import urlopen
splunk_home = os.environ['SPLUNK_HOME']
LOG_LEVEL = logging.INFO
LOG_FILE_NAME = "acms.log"
def setup_logger(): # setup logging
global SPLUNK_HOME, LOG_LEVEL, LOG_FILE_NAME
if 'SPLUNK_HOME' in os.environ:
SPLUNK_HOME = os.environ['SPLUNK_HOME']
log_format = "%(asctime)s %(levelname)-s\t%(module)s[%(process)d]:%(lineno)d - %(message)s"
logger = logging.getLogger('v')
logger.setLevel(LOG_LEVEL)
l = logging.handlers.RotatingFileHandler(os.path.join(SPLUNK_HOME, 'var', 'log', 'splunk', LOG_FILE_NAME), mode='a', maxBytes=1000000, backupCount=2)
l.setFormatter(logging.Formatter(log_format))
logger.addHandler(l)
# ..and (optionally) output to console
logH = logging.StreamHandler()
logH.setFormatter(logging.Formatter(fmt=log_format))
# logger.addHandler(logH)
logger.propagate = False
return logger
logger = setup_logger()
class Update_SbApps(PersistentServerConnectionApplication):
def __init__(self, _command_line, _command_arg):
super(PersistentServerConnectionApplication, self).__init__()
# Handle a syncronous from splunkd.
def handle(self, in_string):
"""
Called for a simple synchronous request.
@param in_string: request data passed in
@rtype: string or dict
@return: String to return in response. If a dict was passed in,
it will automatically be JSON encoded before being returned.
"""
#dbg.set_breakpoint()
try :
bucket_name = "splunkbaseassets"
file_name = "splunkbase_apps.csv"
s3_path = "splunkbase_apps/" + file_name
s3 = boto3.client("s3", aws_access_key_id='AKIAWFRE2V5CBQOFF632',
aws_secret_access_key='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',
region_name='us-east-1')
obj = s3.get_object(Bucket=bucket_name, Key=s3_path)
with gzip.open(os.path.join(splunk_home,"etc","apps","appcontentmanager",'lookups','acms_splunkbase_apps.csv.gz'), 'wb') as gz_out_csv:
gz_out_csv.write(obj['Body'].read())
gz_out_csv.close()
return {'payload': {'status':'success'}, 'status': 200}
except:
return {'payload': {'status':'Error'}, 'status': 400}
def handleStream(self, handle, in_string):
"""
For future use
"""
raise NotImplementedError(
"PersistentServerConnectionApplication.handleStream")
def done(self):
"""
Virtual method which can be optionally overridden to receive a
callback after the request completes.
"""
pass
def convert_to_dict(self, query):
"""
Create a dictionary containing the parameters.
"""
parameters = {}
for key, val in query:
# If the key is already in the list, but the existing entry isn't a list then make the
# existing entry a list and add thi one
if key in parameters and not isinstance(parameters[key], list):
parameters[key] = [parameters[key], val]
# If the entry is already included as a list, then just add the entry
elif key in parameters:
parameters[key].append(val)
# Otherwise, just add the entry
else:
parameters[key] = val
return parameters
def parse_in_string(self, in_string):
"""
Parse the in_string
"""
params = json.loads(in_string)
params['method'] = params['method'].lower()
params['form_parameters'] = self.convert_to_dict(params.get('form', []))
params['query_parameters'] = self.convert_to_dict(params.get('query', []))
return params

@ -0,0 +1,9 @@
[settings]
blacklisted_apps = alert_logevent,alert_webhook,appsbrowser,introspection_generator_addon,launcher,learned,legacy,logd_input,python_upgrade_readiness_app,sample_app,splunk_assist,splunk_gdi,splunk_httpinput,splunk_ingest_actions,splunk_instrumentation,splunk_internal_metrics,splunk_metrics_workspace,splunk_monitoring_console,splunk_secure_gateway,SplunkForwarder,SplunkLightForwarder,splunk-dashboard-studio
blacklisted_conffiles = server,limits,app,passwords
blacklisted_stanzas =
blacklisted_roles = user
blacklisted_users =
theme = light
is_configured = 0
default_owner = nobody

@ -0,0 +1,24 @@
[id]
name = appcontentmanager
version = 0.5.983beta
[ui]
is_visible = 1
label = App Content Manager
supported_themes = light,dark
[launcher]
author = Splunk
description = The Splunk App Content Manager is an applicationdesigned to simplify the management and deployment of content across various Splunk Cloud stacks. It conceals the intricacies of this process and guides administrators through a user-friendly wizard, making it easy to achieve the intended goal.
version = 0.5.983beta
[package]
check_for_updates = 1
id = appcontentmanager
[install]
is_configured = 1
build = 1
[triggers]
reload.splunk_create = simple

@ -0,0 +1,10 @@
[acms_updatesplunkbaseapps]
filename = update_splunkbase_lookup.py
generating = false
maxinputs = 0
supports_rawargs = false
retainsevents = false
streaming = false
supports_getinfo=false
local = true
python.version = python3

@ -0,0 +1,3 @@
<nav>
<view name="deploy" default="true"/>
</nav>

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<view template="appcontentmanager:/templates/start.html" type="html">
<label>Activity</label>
</view>

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<view template="appcontentmanager:/templates/start.html" type="html">
<label>Content Manager</label>
</view>

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<view template="appcontentmanager:/templates/start.html" type="html">
<label>Deploy!</label>
</view>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save