64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
import subprocess
|
|
import re
|
|
import csv
|
|
import os
|
|
import time
|
|
|
|
# Define your shell command
|
|
command = ["ifstat", "-znq", "-b", "1", "1"]
|
|
|
|
headerRow = [
|
|
"timestamp",
|
|
"name",
|
|
"Kbps_in",
|
|
"Kbps_out",
|
|
]
|
|
|
|
filename = "ifStat.csv"
|
|
|
|
|
|
def runifstat():
|
|
# Run the command and capture output
|
|
result = subprocess.run(command, capture_output=True, text=True)
|
|
|
|
timestamp = time.time()
|
|
local_time = time.localtime(timestamp)
|
|
# Format the time components for a more readable output
|
|
timestamp = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
|
|
|
|
# Check the return code (0 for success)
|
|
if result.returncode == 0:
|
|
# Check if the file exists
|
|
if not os.path.exists(filename):
|
|
# Create the file in write mode ('w') if it doesn't exist
|
|
with open(filename, "w", newline="") as csvfile:
|
|
csv_writer = csv.writer(csvfile)
|
|
# Write the header row (optional)
|
|
csv_writer.writerow(headerRow)
|
|
|
|
# Access the captured output as a string
|
|
output = result.stdout
|
|
|
|
bylines = output.split("\n")
|
|
interfaces = bylines[0].split()
|
|
stats = bylines[2].split()
|
|
|
|
for nic in interfaces:
|
|
lineData = [timestamp, nic, stats.pop(0), stats.pop(0)]
|
|
|
|
if lineData:
|
|
with open(filename, "a", newline="") as csvfile:
|
|
csv_writer = csv.writer(csvfile)
|
|
csv_writer.writerow(lineData)
|
|
|
|
else:
|
|
print(f"Error running command: {result.stderr}")
|
|
|
|
|
|
def main():
|
|
runifstat()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|