.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "RRDGRAPH_RPN 1" .TH RRDGRAPH_RPN 1 2026-08-08 1.11.0 rrdtool .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" rrdgraph_rpn \- درباره محاسبات ریاضی RPN در rrdtool graph .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fIRPN expression\fR:=\fIvname\fR|\fIoperator\fR|\fIvalue\fR[,\fIRPN expression\fR] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" اگر تاکنون از ماشین‌حساب‌های سنتی HP استفاده کرده باشید، با \&\fBRPN\fR (نشانه‌گذاری معکوس لهستانی یا Reverse Polish Notation) آشنا هستید. ایدهٔ پشت \fBRPN\fR این است که شما یک پشته (stack) دارید و داده‌های خود را روی این پشته قرار می‌دهید (push می‌کنید). هر زمان که عملیاتی را اجرا کنید، به تعداد عناصر مورد نیازش از پشته برمی‌دارد (pop می‌کند). قرار دادن داده روی پشته به‌صورت ضمنی انجام می‌شود، بنابراین هر زمان که یک عدد یا متغیر را مشخص کنید، به‌طور خودکار روی پشته قرار می‌گیرد. .PP در پایان محاسبات باید یک و فقط یک مقدار روی پشته باقی بماند. این مقدار همان خروجی تابع است و مقداری است که در \fIvname\fR قرار می‌گیرد. برای دستورالعمل‌های \fBCDEF\fR، پشته به ازای هر نقطهٔ داده روی نمودار پردازش می‌شود. دستورالعمل‌های \fBVDEF\fR در یک بار اجرا روی کل یک مجموعه داده عمل می‌کنند. توجه داشته باشید که در حال حاضر دستورالعمل‌های \&\fBVDEF\fR تنها از فهرست محدودی از توابع پشتیبانی می‌کنند. .PP مثال: \f(CW\*(C`VDEF:maximum=mydata,MAXIMUM\*(C'\fR .PP این کار متغیر «maximum» را تنظیم می‌کند که اکنون می‌توانید از آن در ادامهٔ اسکریپت RRD خود استفاده کنید. .PP مثال: \f(CW\*(C`CDEF:mydatabits=mydata,8,*\*(C'\fR .PP این یعنی: متغیر \fImydata\fR را در پشته قرار بده، عدد 8 را در پشته قرار بده، عملگر \fI*\fR را اجرا کن. این عملگر به دو عنصر نیاز دارد و با استفاده از آن‌ها یک مقدار را بازمی‌گرداند. این مقدار سپس در \fImydatabits\fR ذخیره می‌شود. همان‌طور که حدس زده‌اید، این دستور چیزی بیشتر از \&\fImydatabits = mydata * 8\fR نیست. قدرت واقعی \fBRPN\fR در این واقعیت نهفته است که اولویت و ترتیب پردازش ورودی‌ها همیشه کاملاً مشخص است. برای عباراتی مانند \f(CW\*(C`a = b + 3 * 5\*(C'\fR ابتدا باید ۳ را در ۵ ضرب کنید پیش از آنکه \fIb\fR را با آن جمع کنید تا \fIa\fR به دست آید. با این حال، با پرانتز می‌توانید این ترتیب را تغییر دهید: \f(CW\*(C`a = (b + 3) * 5\*(C'\fR. در \fBRPN\fR، این کار را با \f(CW\*(C`a = b, 3, +, 5, *\*(C'\fR بدون نیاز به پرانتز انجام می‌دهید. .SH "عملگرها (OPERATORS)" .IX Header "OPERATORS" .IP "عملگرهای بولی" 4 .IX Item "Boolean operators" \&\fBLT, LE, GT, GE, EQ, NE\fR .Sp عملگرهای «کوچک‌تر»، «کوچک‌تر یا مساوی»، «بزرگ‌تر»، «بزرگ‌تر یا مساوی»، «برابر»، و «نابرابر»، همگی دو عنصر را از پشته برمی‌دارند، آن‌ها را بر اساس شرط مشخص‌شده مقایسه می‌کنند و برای درست مقدار 1 یا برای نادرست مقدار 0 بازمی‌گردانند. مقایسه یک مقدار \fIunknown\fR یا \&\fIinfinite\fR منجر به بازگرداندن \fIunknown\fR می‌شود ... که در فراخوانی \fBIF\fR نیز به‌عنوان نادرست تلقی خواهد شد. .Sp \&\fBUN, ISINF\fR .Sp یک عنصر از پشته برمی‌دارند و آن را به ترتیب با \fIunknown\fR یا \&\fIبی‌نهایت مثبت یا منفی\fR مقایسه می‌کنند. برای درست مقدار 1 و برای نادرست مقدار 0 بازمی‌گردانند. .Sp \&\fIcondition\fR,\fIthen\fR,\fIelse\fR,\fBIF\fR .Sp سه عنصر را از پشته برمی‌دارد. اگر عنصری که در آخر برداشته شد 0 (نادرست) باشد، مقداری که اول برداشته شده بود به پشته بازگردانده می‌شود، در غیر این صورت مقداری که در نوبت دوم برداشته شده بود بازگردانده می‌شود. این در واقع بدین معناست که هر مقداری غیر از 0 به‌عنوان درست در نظر گرفته می‌شود. .Sp مثال: عبارت \f(CW\*(C`A,B,C,IF\*(C'\fR باید به صورت \f(CW\*(C`if (A) then (B) else (C)\*(C'\fR خوانده شود. .Sp .IP "مقایسه مقادیر" 4 .IX Item "Comparing values" \&\fBMIN, MAX\fR .Sp دو عنصر از پشته برمی‌دارند و به ترتیب مقدار کوچک‌تر یا بزرگ‌تر را بازمی‌گردانند. توجه داشته باشید که \fIinfinite\fR از هر چیز دیگری بزرگ‌تر است. اگر یکی از اعداد ورودی \fIunknown\fR باشد، نتیجه عملیات نیز \&\fIunknown\fR خواهد بود. .Sp \&\fBMINNAN, MAXNAN\fR .Sp نسخهٔ امن در برابر NAN برای MIN و MAX. اگر یکی از اعداد ورودی \fIunknown\fR باشد، نتیجه عملیات عدد دیگر خواهد بود. اگر هر دو \fIunknown\fR باشند، نتیجه عملیات \fIunknown\fR است. .Sp \&\fIlower\-limit\fR,\fIupper\-limit\fR,\fBLIMIT\fR .Sp دو عنصر را از پشته برمی‌دارد و از آن‌ها برای تعریف یک محدوده استفاده می‌کند. سپس عنصر دیگری را برمی‌دارد و اگر درون محدوده قرار گیرد، مجدداً به پشته بازگردانده می‌شود. در غیر این صورت، یک \fIunknown\fR در پشته قرار می‌گیرد. .Sp محدودهٔ تعریف‌شده شامل دو نقطهٔ مرزی نیز می‌شود (بنابراین: عددی برابر با یکی از مرزها به پشته بازگردانده خواهد شد). اگر هر یک از این سه عدد دخیل \fIunknown\fR یا \&\fIinfinite\fR باشد، این تابع همیشه یک \fIunknown\fR بازمی‌گرداند. .Sp مثال: دستور \f(CW\*(C`CDEF:a=alpha,0,100,LIMIT\*(C'\fR اگر alpha کمتر از 0 یا بیشتر از 100 باشد، مقدار \fIunknown\fR را بازمی‌گرداند. .Sp .IP "عملیات حسابی" 4 .IX Item "Arithmetics" \&\fB+, \-, *, /, %\fR .Sp جمع، تفریق، ضرب، تقسیم، باقیمانده (modulo) .Sp \&\fBADDNAN\fR .Sp جمع امن در برابر NAN. اگر یکی از پارامترها NAN/UNKNOWN باشد، با آن مانند صفر رفتار خواهد شد. اگر هر دو پارامتر NAN/UNKNOWN باشند، NAN/UNKNOWN بازگردانده می‌شود. .Sp \&\fIvalue\fR,\fIpower\fR,\fBPOW\fR .Sp مقدار \fIvalue\fR را به توان \fIpower\fR می‌رساند. .Sp \&\fBSIN, COS, LOG, EXP, SQRT\fR .Sp سینوس و کسینوس (ورودی بر حسب رادیان)، لگاریتم طبیعی (log) و تابع نمایی (exp)، ریشه دوم (جذر). .Sp \&\fBATAN\fR .Sp آرک‌تانژانت (خروجی بر حسب رادیان). .Sp \&\fBATAN2\fR .Sp آرک‌تانژانت مؤلفه‌های y و x (خروجی بر حسب رادیان). این عملگر یک عنصر را از پشته برمی‌دارد که مؤلفهٔ x (کسینوس) است، و سپس عنصر دومی که مؤلفهٔ y (سینوس) است. سپس آرک‌تانژانت نسبت آن‌ها را با رفع ابهام بین ربع‌های صفحه مختصات در پشته قرار می‌دهد. .Sp مثال: دستور \f(CW\*(C`CDEF:angle=Y,X,ATAN2,RAD2DEG\*(C'\fR مؤلفه‌های \f(CW\*(C`X,Y\*(C'\fR را به یک زاویه بر حسب درجه تبدیل می‌کند. .Sp \&\fBFLOOR, CEIL\fR .Sp گرد کردن به پایین یا بالا به نزدیک‌ترین عدد صحیح. .Sp \&\fBROUND\fR .Sp گرد کردن به نزدیک‌ترین عدد صحیح. .Sp \&\fBDEG2RAD, RAD2DEG\fR .Sp تبدیل زاویه از درجه به رادیان، یا از رادیان به درجه. .Sp \&\fBABS\fR .Sp محاسبه مقدار قدر مطلق..IP "عملیات‌های مجموعه (Set Operations)" 4 .IX Item "عملیات‌های مجموعه (Set Operations)" \&\fIcount\fR,\fBSORT\fR .Sp یک عنصر را از پشته برمی‌دارد (pop می‌کند). این عنصر، تعداد (\fIcount\fR) مواردی است که باید مرتب شوند. سپس \fIcount\fR عنصر بالایی از عناصر باقی‌مانده، در جای خود روی پشته از کوچک‌ترین به بزرگ‌ترین مرتب می‌شوند. .Sp .Vb 1 \& 4,3,22.1,1,4,SORT \-> 1,3,4,22.1 .Ve .Sp \&\fIcount\fR,\fBREV\fR .Sp ترتیب عناصر را معکوس می‌کند. .Sp مثال: عبارت \f(CW\*(C`CDEF:x=v1,v2,v3,v4,v5,v6,6,SORT,POP,5,REV,POP,+,+,+,4,/\*(C'\fR میانگین مقادیر v1 تا v6 را پس از حذف کوچک‌ترین و بزرگ‌ترین مقدار محاسبه می‌کند. .Sp \&\fIcount\fR,\fBAVG\fR .Sp یک عنصر (\fIcount\fR) را از پشته برمی‌دارد. سپس \fIcount\fR عنصر را خارج کرده و میانگین آن‌ها را با نادیده گرفتن تمام مقادیر UNKNOWN در این فرایند، محاسبه می‌کند. .Sp مثال: \f(CW\*(C`CDEF:x=a,b,c,d,4,AVG\*(C'\fR .Sp \&\fIcount\fR,\fBSMIN\fR و \&\fIcount\fR,\fBSMAX\fR .Sp یک عنصر (\fIcount\fR) را از پشته برمی‌دارد. اکنون \fIcount\fR عنصر را خارج کرده و کمینه/بیشینه را دوباره روی پشته قرار می‌دهد (push می‌کند). .Sp مثال: \f(CW\*(C`CDEF:x=a,b,c,d,4,SMIN\*(C'\fR .Sp \&\fIcount\fR,\fBMEDIAN\fR .Sp یک عنصر (\fIcount\fR) را از پشته برمی‌دارد. اکنون \fIcount\fR عنصر را خارج کرده و میانه را با نادیده گرفتن تمام مقادیر UNKNOWN در این فرایند پیدا می‌کند. اگر تعداد مقادیر غیر\-UNKNOWN زوج باشد، میانگین دو مقدار میانی روی پشته قرار می‌گیرد. .Sp مثال: \f(CW\*(C`CDEF:x=a,b,c,d,4,MEDIAN\*(C'\fR .Sp \&\fIcount\fR,\fBSTDEV\fR .Sp یک عنصر (\fIcount\fR) را از پشته برمی‌دارد. اکنون \fIcount\fR عنصر را خارج کرده و انحراف معیار این مقادیر را (با نادیده گرفتن مقادیر NAN) محاسبه می‌کند. نتیجه را دوباره در پشته قرار می‌دهد. .Sp مثال: \f(CW\*(C`CDEF:x=a,b,c,d,4,STDEV\*(C'\fR .Sp \&\fIpercent\fR,\fIcount\fR,\fBPERCENT\fR .Sp دو عنصر (\fIcount\fR,\fIpercent\fR) را از پشته برمی‌دارد. اکنون \fIcount\fR عنصر را خارج کرده و آن‌ها را بر اساس اندازه مرتب می‌کند (به‌طوری که کوچک‌ترین عناصر \-INF، بزرگ‌ترین‌ها INF و NaN بزرگ‌تر از \-INF اما کوچک‌تر از هر چیز دیگری است). عنصری را از فهرست مرتب‌شده برمی‌گزیند که \fIpercent\fR درصد عناصر برابر با عنصر انتخاب‌شده باشند. نتیجه را روی پشته قرار می‌دهد. .Sp مثال: \f(CW\*(C`CDEF:x=a,b,c,d,95,4,PERCENT\*(C'\fR .Sp \&\fIcount\fR,\fBTREND, TRENDNAN\fR .Sp یک میانگین با «پنجرهٔ لغزان» (sliding window) از یک سری دادهٔ دیگر ایجاد می‌کند. .Sp نحوهٔ استفاده: CDEF:smoothed=x,1800,TREND .Sp این دستور یک میانگین پنجرهٔ لغزان نیم‌ساعته (۱۸۰۰ ثانیه‌ای) از x ایجاد می‌کند. این میانگین اساساً همان‌طور که در اینجا نشان داده شده محاسبه می‌شود: .Sp .Vb 8 \& +\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-> \& now \& delay t0 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& delay t1 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& delay t2 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& \& \& Value at sample (t0) will be the average between (t0\-delay) and (t0) \& Value at sample (t1) will be the average between (t1\-delay) and (t1) \& Value at sample (t2) will be the average between (t2\-delay) and (t2) .Ve .Sp عملگر TRENDNAN برخلاف TREND در برابر مقادیر NAN ایمن است (NAN\-safe). اگر از TREND استفاده کنید و یکی از مقادیر منبع NAN باشد، کل پنجرهٔ لغزان تحت تأثیر قرار می‌گیرد. عملگر TRENDNAN تمام مقادیر NAN را در پنجرهٔ لغزان نادیده گرفته و میانگین مقادیر باقی‌مانده را محاسبه می‌کند. .Sp \&\fBPREDICT, PREDICTSIGMA, PREDICTPERC\fR .Sp یک میانگین/سیگما/صدک «پنجرهٔ لغزان» از یک سری دادهٔ دیگر ایجاد می‌کند که هم‌زمان سری داده‌ها را به میزان زمان‌های مشخص‌شده نیز شیفت می‌دهد. .Sp نحوهٔ استفاده \- تعیین صریح شیفت‌ها: \&\f(CW\*(C`CDEF:predict=,...,,n,,x,PREDICT\*(C'\fR \&\f(CW\*(C`CDEF:sigma=,...,,n,,x,PREDICTSIGMA\*(C'\fR \&\f(CW\*(C`CDEF:perc=,...,,n,,,x,PREDICTPERC\*(C'\fR .Sp نحوهٔ استفاده \- شیفت‌های تعریف‌شده بر اساس یک شیفت پایه و تعداد دفعات اعمال آن: \&\f(CW\*(C`CDEF:predict=,\-n,,x,PREDICT\*(C'\fR \&\f(CW\*(C`CDEF:sigma=,\-n,,x,PREDICTSIGMA\*(C'\fR \&\f(CW\*(C`CDEF:sigma=,\-n,,,x,PREDICTPERC\*(C'\fR .Sp مثال: CDEF:predict=172800,86400,2,1800,x,PREDICT .Sp این دستور یک میانگین/سیگمای پنجرهٔ لغزان نیم‌ساعته (۱۸۰۰ ثانیه‌ای) از x ایجاد می‌کند؛ این میانگین اساساً مطابق آنچه در اینجا نشان داده شده محاسبه می‌شود: .Sp .Vb 10 \& +\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-!\-\-\-> \& now \& shift 1 t0 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& window \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& shift 2 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& window \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& shift 1 t1 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& window \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& shift 2 \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& window \& <\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-> \& \& Value at sample (t0) will be the average between (t0\-shift1\-window) and (t0\-shift1) \& and between (t0\-shift2\-window) and (t0\-shift2) \& Value at sample (t1) will be the average between (t1\-shift1\-window) and (t1\-shift1) \& and between (t1\-shift2\-window) and (t1\-shift2) .Ve .Sp این تابع بر اساس طراحی خود در برابر NAN ایمن است (NAN\-safe). این قابلیت همچنین امکان برون‌یابی (extrapolation) به آینده (مثلاً چند روز) را فراهم می‌کند؛ ممکن است لازم باشد سری داده را با پارامتر اختیاری start= تعریف کنید، تا سری دادهٔ مبدأ اطلاعات کافی برای پیش‌بینی در ابتدای نمودار را نیز داشته باشد... .Sp صدک (percentile) می‌تواند بین [\-100:+100] باشد. صدک‌های مثبت بین مقادیر درون‌یابی (interpolate) انجام می‌دهند، در حالی که صدک‌های منفی نزدیک‌ترین مقدار را برمی‌گزینند. .Sp مثال: شما ۷ شیفت با پنجرهٔ ۱۸۰۰ ثانیه‌ای اجرا می‌کنید. با فرض اینکه فایل rrd دارای اندازهٔ گام (step size) ۳۰۰ ثانیه‌ای باشد، یعنی محاسبهٔ صدک باید بر اساس حداکثر ۴۲ مقدار مجزا انجام شود (در صورت وجود NAN کمتر). این یعنی در بهترین حالت، نرخ گام بین مقادیر ۲٫۴ درصد خواهد بود. بنابراین اگر صدک ۹۹ام را بخواهید، باید به مقدار ۴۱٫۵۹ام نگاه کنید. از آنجا که تنها اعداد صحیح داریم، یا مقدار ۴۱ام یا مقدار ۴۲ام انتخاب می‌شود. .Sp در صدک مثبت، یک درون‌یابی خطی بین این ۲ مقدار انجام می‌شود تا مقدار نهایی به دست آید. .Sp در صدک منفی، نزدیک‌ترین مقدار از نظر فاصله بازگردانده می‌شود \- بنابراین در حالت فوق مقدار ۴۲ام بازگردانده می‌شود که در عمل معادل بازگرداندن Percentile100 یا بیشینهٔ ۷ روز گذشته در آن پنجره است. .Sp در اینجا مثالی آمده است که یک نمودار ۱۰ روزه ایجاد می‌کند و پیش‌بینی ۳ روز آینده را به همراه مقدار عدم قطعیت آن (به صورت avg+\-4*sigma) نشان می‌دهد. همچنین مشخص می‌کند که آیا در نقطه‌ای خاص از پیش‌بینی فراتر رفته است یا خیر. .Sp .Vb 10 \& rrdtool graph image.png \-\-imgformat=PNG \e \& \-\-start=\-7days \-\-end=+3days \-\-width=1000 \-\-height=200 \-\-alt\-autoscale\-max \e \& DEF:value=value.rrd:value:AVERAGE:start=\-14days \e \& LINE1:value#ff0000:value \e \& CDEF:predict=86400,\-7,1800,value,PREDICT \e \& CDEF:sigma=86400,\-7,1800,value,PREDICTSIGMA \e \& CDEF:upper=predict,sigma,3,*,+ \e \& CDEF:lower=predict,sigma,3,*,\- \e \& LINE1:predict#00ff00:prediction \e \& LINE1:upper#0000ff:upper\e certainty\e limit \e \& LINE1:lower#0000ff:lower\e certainty\e limit \e \& CDEF:exceeds=value,UN,0,value,lower,upper,LIMIT,UN,IF \e \& TICK:exceeds#aa000080:1 \e \& CDEF:perc95=86400,\-7,1800,95,value,PREDICTPERC \e \& LINE1:perc95#ffff00:95th_percentile .Ve .Sp نکته: تجربه نشان داده است که ضریبی بین ۳ و ۵ برای مقیاس‌بندی سیگما، معیار مناسبی برای تشخیص رفتارهای غیرعادی است. بدیهی است که این موضوع به نوع داده‌ها و میزان «نویز» در سری داده نیز بستگی دارد. .Sp همچنین به استفادهٔ صریح از start= در CDEF توجه کنید \- این کار برای بارگذاری تمام داده‌های مورد نیاز (حتی اگر نمایش داده نشوند) ضروری است. .Sp این پیش‌بینی فقط برای برون‌یابی‌های کوتاه‌مدت قابل استفاده است \- مثلاً چند روز به آینده. .IP "مقادیر ویژه (Special values)" 4 .IX Item "مقادیر ویژه (Special values)" \&\fBUNKN\fR .Sp یک مقدار نامعلوم (unknown) را روی پشته قرار می‌دهد. .Sp \&\fBINF, NEGINF\fR .Sp یک مقدار بی‌نهایت مثبت یا منفی را روی پشته قرار می‌دهد. هنگامی که چنین مقداری رسم می‌شود، صرف‌نظر از اینکه مقدار واقعی روی محور y چه باشد، در بالاترین یا پایین‌ترین نقطهٔ نمودار نمایش داده می‌شود. .Sp \&\fBPREV\fR .Sp اگر این مقدار نخستین مقدار یک مجموعه داده باشد، یک مقدار \fIنامعلوم (unknown)\fR و در غیر این صورت، نتیجهٔ این \fBCDEF\fR در گام زمانی پیشین را روی پشته قرار می‌دهد. این کار امکان انجام محاسبات در طول داده‌ها را فراهم می‌کند. این تابع را نمی‌توان در دستورهای \fBVDEF\fR استفاده کرد. .Sp \&\fBPREV(vname)\fR .Sp اگر این مقدار نخستین مقدار یک مجموعه داده باشد، یک مقدار \fIنامعلوم (unknown)\fR و در غیر این صورت، نتیجهٔ متغیر vname در گام زمانی پیشین را روی پشته قرار می‌دهد. این کار امکان انجام محاسبات در طول داده‌ها را فراهم می‌کند. این تابع را نمی‌توان در دستورهای \fBVDEF\fR استفاده کرد. .Sp \&\fBCOUNT\fR .Sp اگر این مقدار نخستین مقدار مجموعه داده باشد، عدد ۱ را روی پشته قرار می‌دهد، اگر دومین مقدار باشد عدد ۲ و به همین ترتیب. این مقدار ویژه به شما اجازه می‌دهد محاسبات را بر اساس موقعیت مقدار در مجموعه داده انجام دهید. این تابع را نمی‌توان در دستورهای \fBVDEF\fR استفاده کرد..IP "زمان (Time)" 4 .IX Item "Time" زمان در RRDtool بر حسب ثانیه‌های سپری‌شده از مبدأ زمانی (epoch) اندازه‌گیری می‌شود. مبدأ زمانی به‌صورت \f(CW\*(C`Thu\ Jan\ \ 1\ 00:00:00\ UTC\ 1970\*(C'\fR تعریف شده است. .Sp \&\fBNOW\fR .Sp زمان فعلی را روی پشته قرار می‌دهد. .Sp \&\fBSTEPWIDTH\fR .Sp عرض گام فعلی بر حسب ثانیه است. می‌توانید از این عملگر برای بازگشت از نمایش‌های مبتنی بر نرخ به مقادیر مطلق استفاده کنید. .Sp .Vb 1 \& CDEF:abs=rate,STEPWIDTH,*,PREV,ADDNAN .Ve .Sp \&\fBNEWDAY\fR,\fBNEWWEEK\fR,\fBNEWMONTH\fR,\fBNEWYEAR\fR .Sp این عملگرها هرگاه گامی نخستین گام از دورهٔ داده‌شده باشد، مقدار 1.0 را برمی‌گردانند. دوره‌ها بر اساس منطقه زمانی محلی و تنظیمات \f(CW\*(C`LC_TIME\*(C'\fR تعیین می‌شوند. .Sp .Vb 1 \& CDEF:mtotal=rate,STEPWIDTH,*,NEWMONTH,0,PREV,IF,ADDNAN .Ve .Sp \&\fBTIME\fR .Sp زمانی را که مقدار در حال پردازش در آن ثبت شده است، روی پشته قرار می‌دهد. .Sp \&\fBLTIME\fR .Sp زمان تعریف‌شده توسط \fBTIME\fR را دریافت کرده، اختلاف منطقه زمانی معتبر در آن هنگام را با احتساب ساعت تابستانی (در صورت پشتیبانی سیستم‌عامل شما) اعمال می‌کند و نتیجه را روی پشته قرار می‌دهد. در بخش مثال‌های زیر، نمونه‌ای مفصل از نحوهٔ استفاده از این عملگر آورده شده است. .IP "پردازش مستقیم پشته" 4 .IX Item "Processing the stack directly" \&\fBDUP, POP, EXC\fR .Sp تکثیر عنصر بالایی، حذف عنصر بالایی، جابه‌جا کردن دو عنصر بالای پشته با یکدیگر. .Sp \&\fBDEPTH\fR .Sp عمق فعلی پشته را روی پشته قرار می‌دهد. .Sp .Vb 1 \& a,b,DEPTH \-> a,b,2 .Ve .Sp n,\fBCOPY\fR .Sp نسخه‌ای از n عنصر بالای پشته را روی پشته قرار می‌دهد. .Sp .Vb 1 \& a,b,c,d,2,COPY => a,b,c,d,c,d .Ve .Sp n,\fBINDEX\fR .Sp عنصر nام را روی پشته قرار می‌دهد. .Sp .Vb 1 \& a,b,c,d,3,INDEX \-> a,b,c,d,b .Ve .Sp n,m,\fBROLL\fR .Sp n عنصر بالای پشته را به اندازهٔ m می‌چرخاند. .Sp .Vb 2 \& a,b,c,d,3,1,ROLL => a,d,b,c \& a,b,c,d,3,\-1,ROLL => a,c,d,b .Ve .Sp .SH "متغیرها (VARIABLES)" .IX Header "VARIABLES" این عملگرها تنها در دستورهای \fBVDEF\fR کار می‌کنند. توجه داشته باشید که در حال حاضر تنها همین عملگرها برای \fBVDEF\fR قابل استفاده هستند. .IP "MAXIMUM, MINIMUM, AVERAGE" 4 .IX Item "MAXIMUM, MINIMUM, AVERAGE" مقدار متناظر را برمی‌گردانند؛ MAXIMUM و MINIMUM همچنین نخستین رخداد آن مقدار را در مؤلفهٔ زمان بازمی‌گردانند. .Sp مثال: \f(CW\*(C`VDEF:avg=mydata,AVERAGE\*(C'\fR .IP STDEV 4 .IX Item "STDEV" انحراف معیار مقادیر را برمی‌گرداند. .Sp مثال: \f(CW\*(C`VDEF:stdev=mydata,STDEV\*(C'\fR .IP "LAST, FIRST" 4 .IX Item "LAST, FIRST" آخرین/نخستین مقدار غیر\-nan یا نامتناهی را برای جریان دادهٔ انتخاب‌شده، به همراه برچسب زمانی آن برمی‌گردانند. .Sp مثال: \f(CW\*(C`VDEF:first=mydata,FIRST\*(C'\fR .IP TOTAL 4 .IX Item "TOTAL" نرخ هر بازهٔ زمانی تعریف‌شده را ضرب در اندازهٔ گام برمی‌گرداند. این می‌تواند برای مثال، هنگامی که بایت بر ثانیه را ثبت کرده‌اید، کل بایت‌های انتقال‌یافته را بازگرداند. مؤلفهٔ زمان، تعداد ثانیه‌ها را برمی‌گرداند. .Sp مثال: \f(CW\*(C`VDEF:total=mydata,TOTAL\*(C'\fR .IP "PERCENT, PERCENTNAN" 4 .IX Item "PERCENT, PERCENTNAN" این باید پس از یک \fIvname\fR از دستورهای \fBDEF\fR یا \fBCDEF\fR بیاید. \fIvname\fR از پشته برداشته می‌شود (pop)، عدد دیگری نیز برداشته می‌شود که درصد مشخصی است (0..100). سپس مجموعه داده مرتب می‌شود و مقدار بازگردانده‌شده به‌گونه‌ای انتخاب می‌شود که \fIpercentage\fR درصد از مقادیر، کمتر یا مساوی با نتیجه باشند. برای PERCENTNAN مقادیر \fIUnknown\fR نادیده گرفته می‌شوند، اما برای PERCENT مقادیر \fIUnknown\fR برای این منظور کمتر از هر عدد متناهی در نظر گرفته می‌شوند؛ بنابراین اگر این عملگر یک مقدار \fIunknown\fR برگرداند، به این معنی است که تعداد بسیار زیادی از آن‌ها را در داده‌های خود دارید. اعداد \fBInf\fRinite کمتر یا بیشتر از اعداد متناهی هستند و همیشه از مقادیر \fIUnknown\fR بزرگ‌ترند. (NaN < \-INF < finite values < INF) .Sp مثال: \f(CW\*(C`VDEF:perc95=mydata,95,PERCENT\*(C'\fR \f(CW\*(C`VDEF:percnan95=mydata,95,PERCENTNAN\*(C'\fR .IP "LSLSLOPE, LSLINT, LSLCORREL" 4 .IX Item "LSLSLOPE, LSLINT, LSLCORREL" پارامترهای مربوط به خط کمترین مربعات (\fBL\fReast \fBS\fRquares \fBL\fRine - \fI(y = mx +b)\fR) را که مجموعه داده ارائه‌شده را تقریب می‌زند، بازمی‌گردانند. عملگر LSLSLOPE شیب \fI(m)\fR خط مرتبط با موقعیت COUNT داده‌ها است. عملگر LSLINT عرض از مبدأ \fI(b)\fR است که تصادفاً اولین نقطه داده روی نمودار نیز هست. عملگر LSLCORREL ضریب همبستگی (همچنین شناخته‌شده به عنوان ضریب همبستگی گشتاوری پیرسون یا Pearson\*(Aqs Product Moment Correlation Coefficient) است. دامنهٔ آن از 0 تا +/\-1 بوده و کیفیت برازش را برای تقریب نشان می‌دهد. .Sp مثال: \f(CW\*(C`VDEF:slope=mydata,LSLSLOPE\*(C'\fR.SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" صفحه rrdgraph نمایی کلی از نحوه عملکرد \fBrrdtool graph\fR ارائه می‌دهد. صفحه rrdgraph_data دستورهای \fBDEF\fR، \fBCDEF\fR و \fBVDEF\fR را با جزئیات شرح می‌دهد. صفحه rrdgraph_rpn زبان \fBRPN\fR استفاده‌شده در عبارت‌های \fB?DEF\fR را شرح می‌دهد. صفحه rrdgraph_graph تمام توابع graph و print را شرح می‌دهد. .PP برای نکات و ترفندها، حتماً rrdgraph_examples را مطالعه کنید. .SH "نویسنده (AUTHOR)" .IX Header "AUTHOR" برنامه توسط Tobias Oetiker .PP این صفحه راهنما توسط Alex van den Bogaerdt همراه با اصلاحات و/یا افزوده‌هایی توسط چندین نفر تهیه شده است.