diff --git a/lib/core/cache/Get-IcingaCacheData.psm1 b/lib/core/cache/Get-IcingaCacheData.psm1 new file mode 100644 index 0000000..27b09d9 --- /dev/null +++ b/lib/core/cache/Get-IcingaCacheData.psm1 @@ -0,0 +1,30 @@ +function Get-IcingaCacheData() +{ + param( + [string]$Space, + [string]$CacheStore, + [string]$KeyName + ); + + $CacheFile = Join-Path -Path (Join-Path -Path (Join-Path -Path (Get-IcingaCacheDir) -ChildPath $Space) -ChildPath $CacheStore) -ChildPath ([string]::Format('{0}.json', $KeyName)); + [string]$Content = ''; + $cacheData = @{}; + + if ((Test-Path $CacheFile) -eq $FALSE) { + return $null; + } + + $Content = Get-Content -Path $CacheFile; + + if ([string]::IsNullOrEmpty($Content)) { + return $null; + } + + $cacheData = ConvertFrom-Json -InputObject ([string]$Content); + + if ([string]::IsNullOrEmpty($KeyName)) { + return $cacheData; + } else { + return $cacheData.$KeyName; + } +} diff --git a/lib/core/cache/Set-IcingaCacheData.psm1 b/lib/core/cache/Set-IcingaCacheData.psm1 new file mode 100644 index 0000000..7595410 --- /dev/null +++ b/lib/core/cache/Set-IcingaCacheData.psm1 @@ -0,0 +1,32 @@ +function Set-IcingaCacheData() +{ + param( + [string]$Space, + [string]$CacheStore, + [string]$KeyName, + $Value + ); + + $CacheFile = Join-Path -Path (Join-Path -Path (Join-Path -Path (Get-IcingaCacheDir) -ChildPath $Space) -ChildPath $CacheStore) -ChildPath ([string]::Format('{0}.json', $KeyName)); + $cacheData = @{}; + + if ((Test-Path $CacheFile)) { + $cacheData = Get-IcingaCacheData -Space $Space -CacheStore $CacheStore; + } else { + New-Item -Path $CacheFile -Force | Out-Null; + } + + if ($null -eq $cacheData -or $cacheData.Count -eq 0) { + $cacheData = @{ + $KeyName = $Value + }; + } else { + if ($cacheData.PSobject.Properties.Name -ne $KeyName) { + $cacheData | Add-Member -MemberType NoteProperty -Name $KeyName -Value $Value -Force; + } else { + $cacheData.$KeyName = $Value; + } + } + + Set-Content -Path $CacheFile -Value (ConvertTo-Json -InputObject $cacheData -Depth 100) | Out-Null; +}