import psutil
import time

def calculate_moving_average(data, window_size):
    """Calculates the moving average of a list of numbers.

    Args:
        data: A list of numbers.
        window_size: The size of the moving average window.

    Returns:
        A list of moving averages, or an empty list if the input data is too short.
    """
    if len(data) < window_size:
        return []

    moving_averages = []
    for i in range(window_size, len(data) + 1):
        window = data[i - window_size:i]
        average = sum(window) / window_size
        moving_averages.append(average)

    return moving_averages


def collect_cpu_usage(interval=1):
    """Collects CPU usage percentages over a specified interval.

    Args:
        interval: The time interval (in seconds) between CPU usage samples.

    Returns:
        A list of CPU usage percentages.
    """
    cpu_usage = []
    for _ in range(10):
        cpu_usage.append(psutil.cpu_percent(interval=interval))
        time.sleep(interval)
    return cpu_usage


def collect_memory_usage(interval=1):
    """Collects memory usage percentages over a specified interval.

    Args:
        interval: The time interval (in seconds) between memory usage samples.

    Returns:
        A list of memory usage percentages.
    """
    memory_usage = []
    for _ in range(10):
        memory = psutil.virtual_memory()
        memory_usage.append(memory.percent)
        time.sleep(interval)
    return memory_usage


def collect_disk_io(interval=1):
    """Collects disk I/O usage over a specified interval.

    Args:
        interval: The time interval (in seconds) between disk I/O samples.

    Returns:
        A list of disk I/O read and write bytes.
    """
    disk_io_read_bytes = []
    disk_io_write_bytes = []
    io_counters_before = psutil.disk_io_counters()
    time.sleep(interval)
    io_counters_after = psutil.disk_io_counters()
    for _ in range(10):
        read_bytes = io_counters_after.read_bytes - io_counters_before.read_bytes
        write_bytes = io_counters_after.write_bytes - io_counters_before.write_bytes
        disk_io_read_bytes.append(read_bytes)
        disk_io_write_bytes.append(write_bytes)
        io_counters_before = io_counters_after
        time.sleep(interval)
        io_counters_after = psutil.disk_io_counters()

    disk_io_combined = [read + write for read, write in zip(disk_io_read_bytes, disk_io_write_bytes)]
    return disk_io_combined
