@@ -10,7 +10,9 @@ import io.github.datacatering.datacaterer.core.parser.PlanParser
1010import io .github .datacatering .datacaterer .core .plan .{PlanProcessor , YamlPlanRun }
1111import io .github .datacatering .datacaterer .core .ui .config .UiConfiguration .INSTALL_DIRECTORY
1212import io .github .datacatering .datacaterer .core .ui .mapper .ConfigurationMapper .configurationMapping
13- import io .github .datacatering .datacaterer .core .ui .model .{Connection , PlanRunExecution , PlanRunRequest , PlanRunRequests }
13+ import io .github .datacatering .datacaterer .core .ui .model .{Connection , PlanRunExecution , PlanRunRequest , PlanRunRequests , SchemaSampleRequest , TaskFileSampleRequest , TaskYamlSampleRequest , SampleResponse }
14+ import io .github .datacatering .datacaterer .core .ui .sample .FastSampleGenerator
15+ import io .github .datacatering .datacaterer .api .model .Field
1416import io .github .datacatering .datacaterer .core .ui .plan .PlanResponseHandler .{KO , OK , Response }
1517import io .github .datacatering .datacaterer .core .util .{ObjectMapperUtil , SparkProvider }
1618import org .apache .log4j .Logger
@@ -67,6 +69,12 @@ object PlanRepository {
6769
6870 final case class StartupSpark () extends PlanCommand
6971
72+ final case class GenerateFromTaskFile (request : TaskFileSampleRequest , replyTo : ActorRef [SampleResponse ]) extends PlanCommand
73+
74+ final case class GenerateFromTaskYaml (request : TaskYamlSampleRequest , replyTo : ActorRef [SampleResponse ]) extends PlanCommand
75+
76+ final case class GenerateFromSchema (request : SchemaSampleRequest , replyTo : ActorRef [SampleResponse ]) extends PlanCommand
77+
7078 private val executionSaveFolder = s " $INSTALL_DIRECTORY/execution "
7179 private val planSaveFolder = s " $INSTALL_DIRECTORY/plan "
7280 implicit val ec : ExecutionContextExecutor = ExecutionContext .global
@@ -104,6 +112,15 @@ object PlanRepository {
104112 case StartupSpark () =>
105113 startupSpark()
106114 Behaviors .same
115+ case GenerateFromTaskFile (request, replyTo) =>
116+ replyTo ! generateFromTaskFile(request)
117+ Behaviors .same
118+ case GenerateFromTaskYaml (request, replyTo) =>
119+ replyTo ! generateFromTaskYaml(request)
120+ Behaviors .same
121+ case GenerateFromSchema (request, replyTo) =>
122+ replyTo ! generateFromSchema(request)
123+ Behaviors .same
107124 }
108125 }.onFailure(SupervisorStrategy .restart)
109126 }
@@ -393,13 +410,79 @@ object PlanRepository {
393410 }
394411 }
395412
413+ private def generateFromTaskFile (request : TaskFileSampleRequest ): SampleResponse = {
414+ LOGGER .debug(s " Generating sample from task file: ${request.taskYamlPath}, step: ${request.stepName}" )
415+ try {
416+ FastSampleGenerator .generateFromTaskFile(request)
417+ } catch {
418+ case ex : Throwable =>
419+ LOGGER .error(s " Error generating sample from task file " , ex)
420+ SampleResponse (
421+ success = false ,
422+ executionId = java.util.UUID .randomUUID().toString.split(" -" ).head,
423+ error = Some (io.github.datacatering.datacaterer.core.ui.model.SampleError (" INTERNAL_ERROR" , ex.getMessage))
424+ )
425+ }
426+ }
427+
428+ private def generateFromTaskYaml (request : TaskYamlSampleRequest ): SampleResponse = {
429+ LOGGER .debug(s " Generating sample from task YAML content, step: ${request.stepName}" )
430+ try {
431+ FastSampleGenerator .generateFromTaskYaml(request)
432+ } catch {
433+ case ex : Throwable =>
434+ LOGGER .error(s " Error generating sample from task YAML " , ex)
435+ SampleResponse (
436+ success = false ,
437+ executionId = java.util.UUID .randomUUID().toString.split(" -" ).head,
438+ error = Some (io.github.datacatering.datacaterer.core.ui.model.SampleError (" INTERNAL_ERROR" , ex.getMessage))
439+ )
440+ }
441+ }
442+
443+ private def generateFromSchema (request : SchemaSampleRequest ): SampleResponse = {
444+ LOGGER .debug(s " Generating sample from inline fields: ${request.fields.size} fields " )
445+ try {
446+ FastSampleGenerator .generateFromSchema(request)
447+ } catch {
448+ case ex : Throwable =>
449+ LOGGER .error(s " Error generating sample from schema " , ex)
450+ SampleResponse (
451+ success = false ,
452+ executionId = java.util.UUID .randomUUID().toString.split(" -" ).head,
453+ error = Some (io.github.datacatering.datacaterer.core.ui.model.SampleError (" INTERNAL_ERROR" , ex.getMessage))
454+ )
455+ }
456+ }
457+
396458 private def startupSpark (): Response = {
397459 LOGGER .debug(" Starting up Spark" )
398460 setUiRunning
399461 try {
400462 implicit val sparkSession : SparkSession = new SparkProvider (DEFAULT_MASTER , DEFAULT_RUNTIME_CONFIG ).getSparkSession
401463 // run some dummy query
402464 sparkSession.sql(" SELECT 1" ).collect()
465+
466+ // warm up data generation pipeline with a simple sample request
467+ LOGGER .debug(" Warming up data generation pipeline" )
468+ val warmupRequest = SchemaSampleRequest (
469+ fields = List (
470+ Field (
471+ name = " warmup_id" ,
472+ `type` = Some (" long" ),
473+ options = Map (" min" -> 1L , " max" -> 10L )
474+ )
475+ ),
476+ sampleSize = 1 ,
477+ fastMode = true
478+ )
479+ val warmupResult = FastSampleGenerator .generateFromSchema(warmupRequest)
480+ if (warmupResult.success) {
481+ LOGGER .debug(" Data generation pipeline warmed up successfully" )
482+ } else {
483+ LOGGER .warn(s " Warmup failed: ${warmupResult.error}" )
484+ }
485+
403486 OK
404487 } catch {
405488 case ex : Throwable => KO (" Failed to start up Spark" , ex)
0 commit comments