প্রোফাইলিংম্যানেজার ডিভাইসে স্থানীয়ভাবে ট্রেস সংরক্ষণ করে। স্থানীয় ডিবাগিংয়ের জন্য এডিবি (ADB) ব্যবহার করে এই ফাইলগুলো পুনরুদ্ধার করা গেলেও, ফিল্ড ডেটা সংগ্রহের জন্য এগুলো একটি সার্ভারে আপলোড করতে হয়।
ট্রেস ফাইলগুলো বড় হতে পারে (প্রায়শই কয়েক মেগাবাইট)। ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব এড়াতে বা মোবাইল ডেটা খরচ হওয়া থেকে বাঁচতে, আপনার উচিত ব্যাকগ্রাউন্ডে আপলোড করার সময়সূচী নির্ধারণ করা; বিশেষত যখন ডিভাইসটি কোনো আনমিটারড নেটওয়ার্কে (ওয়াই-ফাই) সংযুক্ত থাকে, চার্জিং অবস্থায় থাকে এবং নিষ্ক্রিয় থাকে।
একটি WorkManager আপলোড জব সেট আপ করুন
ProfilingManager ক্লাউড-নিরপেক্ষ; আপনি আপনার পছন্দের যেকোনো পরিকাঠামোতে ট্রেস আপলোড করতে পারেন। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে ব্যবহারকারীর কাজে ব্যাঘাত না ঘটিয়ে একটি আপলোড জব শিডিউল করতে WorkManager ব্যবহার করা যায়।
আপলোড জব সেটআপ করার জন্য কোডের উদাহরণ
আপনার সার্ভারে ট্রেস আপলোড করার জন্য কীভাবে ব্যবহারকারীর কাজে কোনো ব্যাঘাত না ঘটিয়ে একটি জব সেট আপ করতে পারেন, তার একটি উদাহরণ এখানে দেওয়া হলো।
WorkManager নির্ভরতা যোগ করুন
আপনার বিদ্যমান ProfilingManager নির্ভরতাগুলোর পাশাপাশি, এই Jetpack লাইব্রেরিগুলো আপনার build.gradle.kts ফাইলে যোগ করুন। WorkManager জন্য এগুলো প্রয়োজন।
কোটলিন
dependencies { implementation("androidx.work:work-runtime:2.11.2") }
গ্রুভি
dependencies { implementation 'androidx.work:work-runtime:2.11.2' }
কোড স্নিপেট
এই কোডটি দেখায় কিভাবে ট্রেস আপলোড করার জন্য একটি জব সেট আপ করতে হয়। আপনার অ্যাপে ProfilingResult প্রাপ্ত হলে জবটি সেট আপ করা উচিত। এই অংশে প্রোফাইলিং বিভাগটি বাদ দেওয়া হয়েছে, তবে একটি উদাহরণ "Record a system trace" অংশে পাওয়া যাবে।
কোটলিন
class TraceUploadWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { override fun doWork(): Result { // Perform your uploading work here Log.d("ProfileTest", "Uploading trace: " + inputData.getString("PROFILE_PATH")) return Result.success() } } fun setupProfileUploadWorker(profileFilepath: String?) { val workMgr = WorkManager.getInstance(applicationContext) val workRequestBuilder = OneTimeWorkRequest.Builder(TraceUploadWorker::class) val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.UNMETERED) .setRequiresDeviceIdle(true) .setRequiresCharging(true) .build() workRequestBuilder.setConstraints(constraints) val inputDataBuilder = Data.Builder() inputDataBuilder.putString("PROFILE_PATH", profileFilepath) workRequestBuilder.setInputData(inputDataBuilder.build()) workMgr.enqueue(workRequestBuilder.build()) }
জাভা
public static class TraceUploadWorker extends Worker { public TraceUploadWorker( @androidx.annotation.NonNull Context context, @androidx.annotation.NonNull WorkerParameters workerParams) { super(context, workerParams); } @androidx.annotation.NonNull @Override public Result doWork() { // Perform your uploading work here Log.d("ProfileTest", "Uploading trace: " + getInputData().getString("PROFILE_PATH")); return Result.success(); } } public void setupProfileUploadWorker(String profileFilepath) { WorkManager workMgr = WorkManager.getInstance(getApplicationContext()); OneTimeWorkRequest.Builder workRequestBuilder = new OneTimeWorkRequest.Builder( TraceUploadWorker.class); Constraints constraints = new Constraints.Builder() .setRequiredNetworkType(NetworkType.UNMETERED) .setRequiresDeviceIdle(true) .build(); workRequestBuilder.setConstraints(constraints); Data.Builder inputDataBuilder = new Data.Builder(); inputDataBuilder.putString("PROFILE_PATH", profileFilepath); workRequestBuilder.setInputData(inputDataBuilder.build()); workMgr.enqueue(workRequestBuilder.build()); }
কোড ওয়াকথ্রু
কোডটি নিম্নলিখিত কাজগুলো করে:
ওয়ার্কার নির্ধারণ করুন :
Workerক্লাসকে এক্সটেন্ড করে একটিTraceUploadWorkerক্লাস তৈরি করুন। আপনার পছন্দের ব্যাকএন্ড SDK বা HTTP ক্লায়েন্ট ব্যবহার করে প্রকৃত ফাইল আপলোড লজিক পরিচালনার জন্যdoWork()মেথডটি ইমপ্লিমেন্ট করুন।অনুরোধ প্রোফাইলিং : ট্রেস (সময়কাল, বাফার নীতি) কনফিগার করতে
SystemTraceRequestBuilderএবং এটি শুরু করতেProfiling.requestProfilingব্যবহার করুন।কাজের সময়সূচী নির্ধারণ করুন :
আপনার কর্মীর জন্য একটি
OneTimeWorkRequest) তৈরি করুন।সীমাবদ্ধতা নির্ধারণ করুন:
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true)এবংsetRequiresCharging(true)ব্যবহার করে নিশ্চিত করুন যে, আপলোডটি শুধুমাত্র তখনই হবে যখন ব্যবহারকারী ওয়াই-ফাই-এ সংযুক্ত থাকবেন, চার্জে দেবেন এবং ডিভাইসটি সক্রিয়ভাবে ব্যবহার করবেন না। আপলোডের কাজের কারণে ব্যবহারকারীর অসুবিধা এড়ানোর জন্য এটি গুরুত্বপূর্ণ।ডেটা প্রেরণ করুন: ওয়ার্কারের কাছে ট্রেস পাথ প্রেরণ করতে
setInputDataব্যবহার করুন।এনকিউ:
WorkManager#enqueueকল করে WorkManager-এর কাছে অনুরোধটি জমা দিন।
পরবর্তী পদক্ষেপ
ট্রেস আপলোড করার পর, আপনি সেগুলো আলাদাভাবে বিশ্লেষণ করতে পারেন অথবা একসাথে অনেকগুলো ট্রেস বিশ্লেষণ করতে পারেন। একটি স্কেলেবল অ্যানালাইসিস পাইপলাইন সেট আপ করার নির্দেশনার জন্য, “Deploying Bigtrace on Kubernetes” দেখুন।