برنامه نویسی

Dev10V2

Summarize this content to 400 words in Persian Lang

import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.util.stream.Collectors;

public class SQLLogAnalyzer {
// Updated pattern to capture all possible thread states and include SELECT in output
private static final Pattern LOG_PATTERN = Pattern.compile(“.*?\\[((?:ACTIVE|STUCK|Async-Pool-\\d+-thread-\\d+|.*?))\\].*?(?:ExecuteThread:\\s+'(\\d+)’|).*?((?i)SELECT\\s+.*)”);
private final Map<String, QueryStats> queryDistribution;
private final Set<String> knownStates;

public SQLLogAnalyzer() {
this.queryDistribution = new HashMap<>();
this.knownStates = new HashSet<>();
}

private static String repeatString(String str, int count) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append(str);
}
return sb.toString();
}

public static class ThreadInfo {
private final String threadId;
private int occurrences;
private final Set<Integer> lineNumbers;

public ThreadInfo(String threadId) {
this.threadId = threadId;
this.occurrences = 0;
this.lineNumbers = new HashSet<>();
}

public void addOccurrence(int lineNumber) {
occurrences++;
lineNumbers.add(lineNumber);
}

@Override
public String toString() {
return String.format(“Thread %s: %d occurrences, Lines: %s”,
threadId,
occurrences,
lineNumbers.stream()
.sorted()
.map(String::valueOf)
.collect(Collectors.joining(“, “))
);
}
}

public static class StateInfo {
private final Map<String, ThreadInfo> threadStats;
private int totalOccurrences;

public StateInfo() {
this.threadStats = new HashMap<>();
this.totalOccurrences = 0;
}

public void addOccurrence(String threadId, int lineNumber) {
threadStats.computeIfAbsent(threadId, ThreadInfo::new)
.addOccurrence(lineNumber);
totalOccurrences++;
}

public int getTotalOccurrences() {
return totalOccurrences;
}

public Collection<ThreadInfo> getThreadStats() {
return threadStats.values();
}
}

public static class QueryStats {
private final String originalQuery;
private final String normalizedQuery;
private int occurrences;
private final Map<String, StateInfo> stateStats;

public QueryStats(String query) {
this.originalQuery = query.trim();
this.normalizedQuery = normalizeQuery(query);
this.occurrences = 0;
this.stateStats = new HashMap<>();
}

private static String normalizeQuery(String query) {
return query.replaceAll(“\\s+”, ” “).trim();
}

public void addOccurrence(String threadId, String state, int lineNumber) {
occurrences++;
stateStats.computeIfAbsent(state, k -> new StateInfo())
.addOccurrence(threadId, lineNumber);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.format(“Query: %s%n”, originalQuery));
sb.append(String.format(“Total Occurrences: %d%n”, occurrences));

// State-wise breakdown
sb.append(“State Distribution:\n”);
stateStats.forEach((state, stateInfo) -> {
sb.append(String.format(” %s (Total: %d):%n”, state, stateInfo.getTotalOccurrences()));
stateInfo.getThreadStats().forEach(threadInfo ->
sb.append(String.format(” %s%n”, threadInfo))
);
});

return sb.toString();
}

public String getNormalizedQuery() {
return normalizedQuery;
}
}

public void analyzeLogs(String filePath) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
int lineNumber = 0;

while ((line = reader.readLine()) != null) {
lineNumber++;
processLine(line, lineNumber);
}
}
}

private void processLine(String line, int lineNumber) {
Matcher matcher = LOG_PATTERN.matcher(line);
if (matcher.find()) {
String state = matcher.group(1);
knownStates.add(state);
String threadId = matcher.group(2) != null ? matcher.group(2) : “N/A”;
String sqlStatement = matcher.group(3).trim();

String normalizedSQL = sqlStatement.replaceAll(“\\s+”, ” “).trim();
queryDistribution
.computeIfAbsent(normalizedSQL, query -> new QueryStats(sqlStatement))
.addOccurrence(threadId, state, lineNumber);
}
}

public void printAnalysis() {
System.out.println(“=== SQL Query Analysis ===\n”);

queryDistribution.values().stream()
.sorted((a, b) -> Integer.compare(b.occurrences, a.occurrences))
.forEach(stats -> {
System.out.println(stats);
System.out.println(repeatString(“-“, 80) + “\n”);
});

printSummaryStats();
}

private void printSummaryStats() {
System.out.println(“=== Summary Statistics ===”);

System.out.println(“Total unique queries: ” + queryDistribution.size());

System.out.println(“\nThread states found: ” +
knownStates.stream().sorted().collect(Collectors.joining(“, “)));

Map<String, Integer> totalStateDistribution = new HashMap<>();
queryDistribution.values().forEach(stats ->
stats.stateStats.forEach((state, stateInfo) ->
totalStateDistribution.merge(state, stateInfo.getTotalOccurrences(), Integer::sum))
);

System.out.println(“\nOverall state distribution:”);
totalStateDistribution.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.forEach(entry ->
System.out.printf(” %s: %d occurrences%n”, entry.getKey(), entry.getValue())
);
}

public static void main(String[] args) {
if (args.length != 1) {
System.out.println(“Usage: java SQLLogAnalyzer <log-file-path>”);
return;
}

SQLLogAnalyzer analyzer = new SQLLogAnalyzer();
try {
analyzer.analyzeLogs(args[0]);
analyzer.printAnalysis();
} catch (IOException e) {
System.err.println(“Error processing log file: ” + e.getMessage());
e.printStackTrace();
}
}
}


import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.util.stream.Collectors;

public class SQLLogAnalyzer {
    // Updated pattern to capture all possible thread states and include SELECT in output
    private static final Pattern LOG_PATTERN = Pattern.compile(".*?\\[((?:ACTIVE|STUCK|Async-Pool-\\d+-thread-\\d+|.*?))\\].*?(?:ExecuteThread:\\s+'(\\d+)'|).*?((?i)SELECT\\s+.*)");
    private final Map<String, QueryStats> queryDistribution;
    private final Set<String> knownStates;

    public SQLLogAnalyzer() {
        this.queryDistribution = new HashMap<>();
        this.knownStates = new HashSet<>();
    }

    private static String repeatString(String str, int count) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < count; i++) {
            sb.append(str);
        }
        return sb.toString();
    }

    public static class ThreadInfo {
        private final String threadId;
        private int occurrences;
        private final Set<Integer> lineNumbers;

        public ThreadInfo(String threadId) {
            this.threadId = threadId;
            this.occurrences = 0;
            this.lineNumbers = new HashSet<>();
        }

        public void addOccurrence(int lineNumber) {
            occurrences++;
            lineNumbers.add(lineNumber);
        }

        @Override
        public String toString() {
            return String.format("Thread %s: %d occurrences, Lines: %s", 
                threadId, 
                occurrences,
                lineNumbers.stream()
                    .sorted()
                    .map(String::valueOf)
                    .collect(Collectors.joining(", "))
            );
        }
    }

    public static class StateInfo {
        private final Map<String, ThreadInfo> threadStats;
        private int totalOccurrences;

        public StateInfo() {
            this.threadStats = new HashMap<>();
            this.totalOccurrences = 0;
        }

        public void addOccurrence(String threadId, int lineNumber) {
            threadStats.computeIfAbsent(threadId, ThreadInfo::new)
                      .addOccurrence(lineNumber);
            totalOccurrences++;
        }

        public int getTotalOccurrences() {
            return totalOccurrences;
        }

        public Collection<ThreadInfo> getThreadStats() {
            return threadStats.values();
        }
    }

    public static class QueryStats {
        private final String originalQuery;
        private final String normalizedQuery;
        private int occurrences;
        private final Map<String, StateInfo> stateStats;

        public QueryStats(String query) {
            this.originalQuery = query.trim();
            this.normalizedQuery = normalizeQuery(query);
            this.occurrences = 0;
            this.stateStats = new HashMap<>();
        }

        private static String normalizeQuery(String query) {
            return query.replaceAll("\\s+", " ").trim();
        }

        public void addOccurrence(String threadId, String state, int lineNumber) {
            occurrences++;
            stateStats.computeIfAbsent(state, k -> new StateInfo())
                     .addOccurrence(threadId, lineNumber);
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append(String.format("Query: %s%n", originalQuery));
            sb.append(String.format("Total Occurrences: %d%n", occurrences));

            // State-wise breakdown
            sb.append("State Distribution:\n");
            stateStats.forEach((state, stateInfo) -> {
                sb.append(String.format("  %s (Total: %d):%n", state, stateInfo.getTotalOccurrences()));
                stateInfo.getThreadStats().forEach(threadInfo -> 
                    sb.append(String.format("    %s%n", threadInfo))
                );
            });

            return sb.toString();
        }

        public String getNormalizedQuery() {
            return normalizedQuery;
        }
    }

    public void analyzeLogs(String filePath) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            int lineNumber = 0;

            while ((line = reader.readLine()) != null) {
                lineNumber++;
                processLine(line, lineNumber);
            }
        }
    }

    private void processLine(String line, int lineNumber) {
        Matcher matcher = LOG_PATTERN.matcher(line);
        if (matcher.find()) {
            String state = matcher.group(1);
            knownStates.add(state);
            String threadId = matcher.group(2) != null ? matcher.group(2) : "N/A";
            String sqlStatement = matcher.group(3).trim();

            String normalizedSQL = sqlStatement.replaceAll("\\s+", " ").trim();
            queryDistribution
                .computeIfAbsent(normalizedSQL, query -> new QueryStats(sqlStatement))
                .addOccurrence(threadId, state, lineNumber);
        }
    }

    public void printAnalysis() {
        System.out.println("=== SQL Query Analysis ===\n");

        queryDistribution.values().stream()
            .sorted((a, b) -> Integer.compare(b.occurrences, a.occurrences))
            .forEach(stats -> {
                System.out.println(stats);
                System.out.println(repeatString("-", 80) + "\n");
            });

        printSummaryStats();
    }

    private void printSummaryStats() {
        System.out.println("=== Summary Statistics ===");

        System.out.println("Total unique queries: " + queryDistribution.size());

        System.out.println("\nThread states found: " + 
            knownStates.stream().sorted().collect(Collectors.joining(", ")));

        Map<String, Integer> totalStateDistribution = new HashMap<>();
        queryDistribution.values().forEach(stats -> 
            stats.stateStats.forEach((state, stateInfo) -> 
                totalStateDistribution.merge(state, stateInfo.getTotalOccurrences(), Integer::sum))
        );

        System.out.println("\nOverall state distribution:");
        totalStateDistribution.entrySet().stream()
            .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
            .forEach(entry -> 
                System.out.printf("  %s: %d occurrences%n", entry.getKey(), entry.getValue())
            );
    }

    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("Usage: java SQLLogAnalyzer <log-file-path>");
            return;
        }

        SQLLogAnalyzer analyzer = new SQLLogAnalyzer();
        try {
            analyzer.analyzeLogs(args[0]);
            analyzer.printAnalysis();
        } catch (IOException e) {
            System.err.println("Error processing log file: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا