প্রোফাইল আপলোড করার জন্য একজন কর্মী সেট আপ করুন

ProfilingManager ডিভাইসে স্থানীয়ভাবে ট্রেস সংরক্ষণ করে। স্থানীয় ডিবাগিংয়ের জন্য ADB ব্যবহার করে আপনি এই ফাইলগুলি পুনরুদ্ধার করতে পারেন, তবে ফিল্ড ডেটা সংগ্রহের জন্য সেগুলি সার্ভারে আপলোড করতে হবে।

ট্রেস ফাইলগুলি বড় হতে পারে (প্রায়শই বেশ কয়েকটি এমবি)। ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলা বা মোবাইল ডেটা ব্যবহার এড়াতে, আপনার আপলোডগুলি ব্যাকগ্রাউন্ডে হওয়ার জন্য সময়সূচী করা উচিত, বিশেষত যখন ডিভাইসটি একটি মিটারবিহীন নেটওয়ার্কে (ওয়াই-ফাই) থাকে, চার্জিং এবং নিষ্ক্রিয় থাকে।

একটি WorkManager আপলোড কাজ সেট আপ করুন

ProfilingManager ক্লাউড-অজ্ঞেয়বাদী; আপনি আপনার পছন্দের যেকোনো অবকাঠামোতে ট্রেস আপলোড করতে পারেন। নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে WorkManager ব্যবহার করে একটি আপলোড কাজের সময়সূচী নির্ধারণ করতে হয় যা ব্যবহারকারীর ব্যাঘাত এড়ায়।

আপলোড কাজ সেটআপ করার জন্য কোড উদাহরণ

আপনার সার্ভারে ট্রেস আপলোড করার জন্য ব্যবহারকারীর জন্য ব্যাঘাত সৃষ্টি না করে এমন একটি কাজ কীভাবে সেট আপ করবেন তার একটি উদাহরণ এখানে দেওয়া হল।

WorkManager নির্ভরতা যোগ করুন

আপনার বিদ্যমান ProfilingManager নির্ভরতা ছাড়াও, এই Jetpack লাইব্রেরিগুলি আপনার build.gradle.kts ফাইলে যোগ করুন। WorkManager এগুলো প্রয়োজন।

কোটলিন

   dependencies {
       implementation("androidx.work:work-runtime:2.11.0")
   }
   

খাঁজকাটা

   dependencies {
       implementation 'androidx.work:work-runtime:2.11.0'
   }
   

কোড স্নিপেট

এই কোডটি দেখায় কিভাবে ট্রেস আপলোড করার জন্য একটি কাজ সেট আপ করতে হয়। আপনার অ্যাপ যখন 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());
}

কোড ওয়াকথ্রু

কোডটি নিম্নলিখিত কাজ করে:

  • কর্মীর সংজ্ঞা দিন : একটি TraceUploadWorker ক্লাস তৈরি করুন যা Worker এক্সটেন্ড করে। আপনার পছন্দের ব্যাকএন্ড SDK বা HTTP ক্লায়েন্ট ব্যবহার করে প্রকৃত ফাইল আপলোড লজিক পরিচালনা করতে doWork() পদ্ধতিটি প্রয়োগ করুন।

  • অনুরোধ প্রোফাইলিং : ট্রেস (সময়কাল, বাফার নীতি) কনফিগার করতে SystemTraceRequestBuilder এবং এটি শুরু করতে Profiling.requestProfiling ব্যবহার করুন।

  • কাজের সময়সূচী নির্ধারণ করুন :

    • আপনার কর্মীর জন্য একটি OneTimeWorkRequest তৈরি করুন।

    • সীমাবদ্ধতা নির্ধারণ করুন: ব্যবহারকারী যখন Wi-Fi ব্যবহার করছেন, চার্জ করছেন এবং সক্রিয়ভাবে ডিভাইসটি ব্যবহার করছেন না তখনই আপলোড নিশ্চিত করতে setRequiredNetworkType(NetworkType.UNMETERED) , setRequiresDeviceIdle(true) এবং setRequiresCharging(true) ব্যবহার করুন। আপলোডের কাজে ব্যবহারকারীর কোনও ব্যাঘাত এড়াতে এটি গুরুত্বপূর্ণ।

    • ডেটা পাস করুন: কর্মীর কাছে ট্রেস পাথটি পাস করতে setInputData ব্যবহার করুন।

    • Enqueue: WorkManager#enqueue এ কল করে WorkManager-এ অনুরোধ জমা দিন।

পরবর্তী পদক্ষেপ

ট্রেস আপলোড করার পরে, আপনি সেগুলি পৃথকভাবে বিশ্লেষণ করতে পারেন অথবা বাল্ক ট্রেস বিশ্লেষণ করতে পারেন। একটি স্কেলেবল বিশ্লেষণ পাইপলাইন স্থাপনের নির্দেশিকা জানতে, Kubernetes-এ Deploying Bigtrace দেখুন।