ProfilingManager ডিভাইসে লোকালি ট্রেস সেভ করে। আপনি লোকাল ডিবাগিংয়ের জন্য ADB ব্যবহার করে এইসব ফাইল ফিরিয়ে আনতে পারলেও, ফিল্ড ডেটা সংগ্রহ করার জন্য সেগুলি সার্ভারে আপলোড করতে হবে।
ট্রেস ফাইল বড় হতে পারে (প্রায়শই কয়েক এমবি)। ব্যবহারকারীর অভিজ্ঞতায় নেতিবাচক প্রভাব ফেলা বা মোবাইল ডেটা খরচ করা এড়াতে, আপনাকে ব্যাকগ্রাউন্ডে আপলোড করার শিডিউল করতে হবে, বিশেষত যখন ডিভাইসটি আনমিটার্ড নেটওয়ার্কে (ওয়াই-ফাই) থাকে, চার্জিং এবং আইডল অবস্থায় থাকে।
WorkManager আপলোড জব সেট-আপ করা
ProfilingManager হল ক্লাউড-অ্যাগনস্টিক; আপনি নিজের বেছে নেওয়া যেকোনও
ইনফ্রাস্ট্রাকচারে ট্রেস আপলোড করতে পারবেন। ব্যবহারকারীর কাজে বাধা না দিয়ে আপলোড করার কাজ শিডিউল করতে কীভাবে
WorkManager ব্যবহার করবেন তা নিম্নলিখিত উদাহরণে দেখানো হয়েছে।
আপলোড জব সেট-আপ করার জন্য কোডের উদাহরণ
ব্যবহারকারীর কাজে বাধা না দিয়ে আপনার সার্ভারে ট্রেস আপলোড করার জন্য কীভাবে কোনও কাজ সেট-আপ করবেন তার একটি উদাহরণ এখানে দেওয়া হল।
WorkManager ডিপেন্ডেন্সি যোগ করুন
আপনার আগে থেকে থাকা ProfilingManager ডিপেন্ডেন্সি ছাড়াও, আপনার build.gradle.kts ফাইলে এইসব Jetpack
লাইব্রেরি যোগ করুন। WorkManager-এর এগুলি প্রয়োজন।
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.12.0") }
গ্ৰুভি
dependencies { implementation 'androidx.work:work-runtime:2.12.0' }
কোড স্নিপেট
ট্রেস আপলোড করার জন্য কীভাবে কোনও কাজ সেট-আপ করতে হয় তা এই কোড থেকে জানা যায়। আপনার অ্যাপ ProfilingResult পেলে
জব সেট-আপ করতে হবে। এই বিভাগে প্রোফাইলিং বিভাগ
বাদ দেওয়া হয়েছে তবে সিস্টেম ট্রেস
রেকর্ড করুন বিকল্পে একটি উদাহরণ পাওয়া যাবে।
Kotlin
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ব্যবহার করুন।Enqueue:
WorkManager#enqueue-এ কল করে WorkManager-এ অনুরোধ জমা দিন।
পরবর্তী ধাপ
ট্রেস আপলোড করার পরে, আপনি সেগুলি আলাদাভাবে বিশ্লেষণ করতে পারেন বা বাল্ক ট্রেস বিশ্লেষণ করতে পারেন। স্কেলেবল বিশ্লেষণ পাইপলাইন সেট-আপ করার ব্যাপারে নির্দেশিকা পেতে, Kubernetes-এ Bigtrace ডেপ্লয় করা দেখুন।