def mem_used(d: ExpData): return fetch_data(d, y=('memory:available', 'memory:unused'), out='memory:used', out_func=lambda df: df['memory:available'].subtract(df[ 'memory:unused']), y_name=MEMORY, **PLOT_FUTURE_MOMENT)
def time_ratio(d: ExpData): return fetch_data(d, y=('perf:real-time', 'perf:user-time', 'perf:sys-time'), out_func=lambda df: df['perf:real-time'] / (df['perf:user-time'] + df['perf:sys-time']), out='time-ratio', y_name='Time Ratio (real/vm time)', **PLOT_PERIOD)
def cpu_qemu(d: ExpData): return fetch_data(d, y=('qemu:cpu-total:usage', 'qemu:time'), out='qemu-usage', out_func=lambda df: df['qemu:cpu-total:usage'].diff(). div(df['qemu:time'].diff()), y_name=CPU, **PLOT_PAST_CONST)
def cpu_usage_percentage(d: ExpData): return fetch_data( d, y=('cpu:cpu-total:total', 'cpu:cpu-total:idle-all', 'cpu:time'), out='cpu-usage-percent', out_func=lambda df: 100 * df['cpu:cpu-total:total'].subtract(df[ 'cpu:cpu-total:idle-all']).div(df['cpu:cpu-total:total']), y_name=CPU_PERCENT, diff=True, **PLOT_PAST_CONST)
def cpu_usage_time(d: ExpData): return fetch_data(d, y=('cpu:cpu-total:total', 'cpu:cpu-total:idle-all', 'cpu:time'), out='cpu-usage', out_func=lambda df: df['cpu:cpu-total:total'].subtract( df['cpu:cpu-total:idle-all']).div(df['cpu:time']), y_name=CPU, diff=True, **PLOT_PAST_CONST)
def ret_func(d: ExpData): return fetch_data( d, y=(f'cpu:cpu-{i}:total', f'cpu:cpu-{i}:idle-all', 'cpu:time'), out=f'cpu-usage-{i}', out_func=lambda df: df[f'cpu:cpu-{i}:total'].subtract(df[ f'cpu:cpu-{i}:idle-all']).div(df['cpu:time']), y_name=CPU, diff=True, **PLOT_PAST_CONST)
def ret_func(d: ExpData): return fetch_data(d, y=(f'{app_name}-stats:cpu:total', f'{app_name}-stats:time'), out=f'{app_name}-cpu-usage', out_func=lambda df: df[f'{app_name}-stats:cpu:total'] .div(df[f'{app_name}-stats:time']), y_name=CPU, diff=True, resample=(60, 1), **PLOT_PAST_CONST)
def mem_available(d: ExpData): return fetch_data(d, y='memory:available', y_name=MEMORY, **PLOT_FUTURE_MOMENT)
def mem_control(d: ExpData): return fetch_data(d, y='controls:memory', y_name=MEMORY, **PLOT_FUTURE_CONST)
def mem_notify(d: ExpData): return fetch_data(d, y='notify:memory', y_name=MEMORY, **PLOT_FUTURE_CONST)
def ops_per_second_real_time(d: ExpData): return fetch_data(d, y='perf:real-time-ops/s', y_name=RATE, **PLOT_PERIOD)
def mem_libvirt(d: ExpData): return fetch_data(d, y='libvirt:curmem', y_name=MEMORY, **PLOT_FUTURE_MOMENT)
def fetch_psql_perf(d: ExpData): return fetch_data(d, y=key, y_name=key, **PLOT_PERIOD)
def perf_throughput(d: ExpData): return fetch_data(d, y='perf:throughput', y_name=RATE, **PLOT_PERIOD)
def tps(d: ExpData): # With connection time return fetch_data(d, y='perf:tps', y_name=TPS, **PLOT_PERIOD)
def mem_minor_fault(d: ExpData): return fetch_data(d, y='memory:minor_fault', y_name='Faults', diff=True, **PLOT_FUTURE_MOMENT)
def ops_per_second_vm_time(d: ExpData): return fetch_data(d, y='perf:user+sys-time-ops/s', y_name=RATE, **PLOT_PERIOD)
def mem_unused(d: ExpData): return fetch_data(d, y='memory:unused', y_name=MEMORY, filter_groups=ONLY_VMS, **PLOT_FUTURE_MOMENT)
def mem_cache_and_buff(d: ExpData): return fetch_data(d, y='memory:cache_and_buff', y_name=MEMORY, filter_groups=ONLY_VMS, **PLOT_FUTURE_MOMENT)
def mem_app_target(d: ExpData): return fetch_data(d, y='app-target:memory', y_name=MEMORY, **PLOT_FUTURE_MOMENT)
def fetch_net_stat(d: ExpData): return fetch_data(d, y=f'net:{interface}:{direction}:{col}', y_name=col, diff=True, **PLOT_PAST_CONST)
def mem_swap_out(d: ExpData): return fetch_data(d, y='memory:swap_out', y_name='Pages', diff=True, **PLOT_FUTURE_MOMENT)
def fetch_sensor(d: ExpData): return fetch_data(d, y=key, y_name=TEMPERATURE, **PLOT_PAST_MOMENT)
def tps_no_conn(d: ExpData): return fetch_data(d, y='perf:tps_without_connections_time', y_name=TPS, **PLOT_PERIOD)
def fetch_freq(d: ExpData): return fetch_data(d, y=f'cpufreq:{core_id}', y_name=FREQUENCY, **PLOT_PAST_MOMENT)
def perf_hits(d: ExpData): return fetch_data(d, y='perf:hit-rate', y_name=RATE, **PLOT_PERIOD)
def fetch_ksm_key(d: ExpData): return fetch_data(d, y=f'ksm:{parameter}', y_name=parameter, **PLOT_PAST_MOMENT)
def mem_alloc(d: ExpData): return fetch_data(d, y='perf:memory', y_name=MEMORY, **PLOT_FUTURE_MOMENT)
def ops(d: ExpData): return fetch_data(d, y='perf:ops', y_name=RATE, **PLOT_PERIOD)