Skip to content

search-dotnet.sh

File: iis/iis_scripts/search-dotnet.sh

# search-dotnet.sh
#!/bin/bash
#
# Search .NET logs (simple pattern matching, no field parsing)
#
# Usage:
#   cd /rootA/dotnet
#   ./search-dotnet.sh --code "403"
#   ./search-dotnet.sh --path "/OrderTests" --time "14:00:00-15:00:00"
#
# Options:
#   --path    : URL pattern to match
#   --time    : Time range (matches as string)
#   --code    : Error code (word boundary match, so "403" won't match "11112403")
#
# Output: Opens fzf with preview, press Enter to open in editor

path_pattern=""
time_pattern=""
error_code=""

while [[ $# -gt 0 ]]; do
    case $1 in
        --path) path_pattern="$2"; shift 2;;
        --time) time_pattern="$2"; shift 2;;
        --code) error_code="$2"; shift 2;;
        *) shift;;
    esac
done

# Build grep pattern
pattern=""
[[ -n "$path_pattern" ]] && pattern="${pattern:+$pattern|}$path_pattern"
[[ -n "$time_pattern" ]] && pattern="${pattern:+$pattern|}$time_pattern"
[[ -n "$error_code" ]] && pattern="${pattern:+$pattern|}\b$error_code\b"

find . -type f -exec grep -n "${pattern:-.*}" {} + | \
    fzf --ansi \
        --delimiter=: \
        --preview 'bat --color=always --highlight-line {2} --line-range {2}: {1} 2>/dev/null || cat {1} | sed -n "$(($(echo {2})-5)),$(($(echo {2})+5))p"' \
        --preview-window 'right:60%:+{2}-5' \
        --bind 'enter:execute(${EDITOR:-vim} +{2} {1})'