সংযোগ করার বিশ মিনিট পরে নোটিশটি এল। তার নিচের কাউন্টারটি আগের সকাল থেকে, বা অ্যাকাউন্টটি শেষবার প্রমাণীকৃত হওয়ার সময় থেকে চলছিল, এবং সতর্কবার্তায় কিছুই বলেনি কোনটি। এটাই লক্ষণ: আপনার সামনের সংযোগের বাইরে অন্য কিছুর সঙ্গে বাঁধা একটি রিমাইন্ডার।

সমাধান আরও ভালো সতর্কবার্তা নয়। সমাধান হলো প্রয়োজনের কথাটি কোন ঘড়ি বোঝাচ্ছে তা ঠিক করা, তারপর সেই ঘড়িতে বিদ্যমান একটি বস্তুর সঙ্গে টাইমারটি বেঁধে দেওয়া।

কী চালু হলো, আর কী গুনছিল

তিনটি সম্ভাব্য উৎস একই বার্তা দেয়। একটি ক্যালেন্ডার নিয়ম নির্দিষ্ট স্থানীয় সময়ে চলে এবং টানেল সম্পর্কে কিছুই জানে না। ক্লায়েন্টের একটি কাউন্টার যেকোনো সংযোগ চালু থাকলে জমা হয় এবং পুনঃসংযোগ সহ্য করে। একটি গেটওয়ে নীতি সেশনটি সার্ভারের দিকে শেষ করে এবং আগে একটি সতর্কবার্তা পাঠায়।

শুধু শেষ দুটি সেশন নিয়ে, এবং তারাও একমত নয়। ক্লায়েন্ট কাউন্টার স্থানীয় প্রক্রিয়া যা লক্ষ করেছে তা মাপে; গেটওয়ে যা প্রমাণীকৃত ও হিসাব করেছে তা মাপে। স্লিপ, নেটওয়ার্ক পরিবর্তন বা পর্যবেক্ষক পুনরায় চালু হওয়া দুটিকে ঘণ্টার পর ঘণ্টা আলাদা করতে পারে, তাই সতর্কবার্তা ও বাধ্যতামূলক মেয়াদ আলাদা হয়ে যায়।

একটি প্রয়োজনের পিছনে তিনটি ঘড়ি

আপনি আসলে যে বাক্যটি চান তা লিখে শুরু করুন। গেটওয়ে এই সংযোগ শেষ করার আগে সতর্ক করা এক দিনের সংযুক্ত সময়ের পরে মনে করানোর মতো একই প্রয়োজন নয়। এই সেশন 23 ঘণ্টা চালু আছে বলে রিপোর্ট করার মতোও নয়। প্রতিটি সংস্করণ আলাদা ঘটনার নাম দেয়, এবং আলাদা উপাদানকে তার উত্তর দিতে হয়।

তারপর দেখুন তথ্য আছে কি না। স্থানীয় শুরুর টাইমস্ট্যাম্প সার্ভারের উপর নির্ভরতা ছাড়াই সেশনের বয়স দেয়। গেটওয়ে নীতি অবশিষ্ট আয়ু দেয়, কিন্তু কেবল যদি গেটওয়ে তা প্রকাশ করে। ব্যবহার প্রতিবেদন ঘটনার পরে সময়কাল দেয়, যা আগাম নোটিশ চালাতে পারে না।

টাইমারটি সেশনে বাঁধুন, অ্যাকাউন্টে নয়

প্রথমে বস্তুটি বেছে নিন। একটি অ্যাকাউন্টে একাধিক ডিভাইস ও একাধিক একসঙ্গে চলা সেশন থাকতে পারে, তাই ব্যবহারকারীর নামে বাঁধা রিমাইন্ডার বলতে পারে না কোন সংযোগটি বয়সে পৌঁছেছে। এটি প্রোফাইল ও সেই সক্রিয়করণে বাঁধুন, এবং সক্রিয়করণ শেষ হলে অপেক্ষমাণ নোটিশ বাতিল করুন।

Evidence you can readWhat it establishesWhere it misleads
Connection state changes to activeA session started nowDoes not carry the gateway's own session identifier
Duration reported at disconnectTotal service time for that sessionArrives too late for any advance notice
Interim usage updateTime accounted up to that updateStaleness equals the update interval
Local timestamp taken at activationAge of your observationResets whenever the observer restarts

ওই টেবিলটি আপনার নিজের নোটিফায়ারের জন্য একটি চুক্তি, কোনো ক্লায়েন্টের কলব্যাক API-এর বর্ণনা নয়। ইনস্টল করা পণ্য সংযোগ অবস্থা সম্পর্কে যা নথিভুক্ত করে সেটাই বাঁধার উৎস; যেখানে এটি কেবল প্রমাণীকরণ ঘটনা প্রকাশ করে, সেখানে স্পষ্ট করে বলুন এবং সেশন অনুমান করার বদলে মোটা আচরণ মেনে নিন।

ছোট থ্রেশহোল্ড দিয়ে পরীক্ষা করুন

এক দিনের টাইমার এক দিনের অপেক্ষা দিয়ে কখনো ডিবাগ করবেন না। একটি কনফিগারযোগ্য থ্রেশহোল্ড যোগ করুন, সেটি ত্রিশ সেকেন্ডে রাখুন, এবং ক্রমে চারটি রূপান্তর চালান: সংযোগ, অপেক্ষা, বিচ্ছিন্ন, পুনঃসংযোগ। প্রতিটি রূপান্তর ঠিক একটি অবস্থা পরিবর্তন তৈরি করবে, এবং পুনঃসংযোগ পুরোনোটি উত্তরাধিকার না নিয়ে নতুন সময়সীমা নির্ধারণ করবে।

# current connection state and profile identity
nmcli -f GENERAL.STATE,GENERAL.CONNECTION connection show work

# the notifier unit you wrote: does it restart the deadline or resume it?
journalctl --user -u vpn-timer.service --since "-5 min" -o cat

শব্দ নয়, টাইমস্ট্যাম্পগুলো দেখুন। আগের সেশনের শুরুর সময় নিয়ে আসা নোটিশ ভুল বস্তু বেঁধেছে, এবং একটি মেয়াদের জন্য দুবার আসা নোটিশ মানে পাঠানোর পতাকাটি কখনো সংরক্ষিত হয়নি।

স্লিপ, পুনঃসংযোগ ও হারানো ডেলিভারি

স্লিপ দুই সরল নকশাকেই ভাঙে। মনোটোনিক কাউন্টডাউন মেশিন ঘুমানোর সময় থেমে যায়, ওয়াল-ক্লক মেয়াদ এগিয়ে চলে, এবং স্লিপের সময়ে চালিত টাইমার দেরিতে বা একেবারেই পৌঁছায় না। আপনার প্রয়োজনে কোন আচরণ দরকার তা ঠিক করুন, তারপর থ্রেশহোল্ড পেরিয়ে মেশিন স্লিপে রাখুন এবং নিশ্চিত করুন।

ডেলিভারিও একই যত্ন দাবি করে। নোটিশ দেখানো না গেলে সেটি সারিতে রাখুন, এবং শেষে দেখানোর আগে লক্ষ্য সেশনটি এখনো আছে কি না আবার যাচাই করুন; নাহলে ব্যবহারকারীকে ইতিমধ্যে শেষ হওয়া সংযোগ সম্পর্কে সতর্ক করা হয়। জোরপূর্বক বিচ্ছিন্নকরণ ও শংসাপত্র নবীকরণ এই পথের বাইরে থাকে, কারণ সংযোগের ভাগ্য নিঃশব্দে বদলে দেওয়া রিমাইন্ডার হলো নোটিশের পোশাক পরা একটি নীতি সিদ্ধান্ত।

সম্পর্কিত নিবন্ধ