Search in sources :

Example 1 with ModuleStat

use of com.alipay.sofa.boot.startup.ModuleStat in project sofa-boot by sofastack.

the class StartupSpringApplicationRunListener method started.

@Override
public void started(ConfigurableApplicationContext context) {
    StartupReporter startupReporter;
    try {
        startupReporter = context.getBean(StartupReporter.class);
    } catch (NoSuchBeanDefinitionException e) {
        // just happen in unit tests
        SofaLogger.warn("Failed to found bean StartupReporter", e);
        return;
    }
    // refresh applicationRefreshStage
    ChildrenStat<ModuleStat> applicationRefreshStage = (ChildrenStat<ModuleStat>) startupReporter.getStageNyName(APPLICATION_CONTEXT_REFRESH_STAGE);
    applicationRefreshStage.setStartTime(applicationContextLoadStage.getEndTime());
    applicationRefreshStage.setCost(applicationRefreshStage.getEndTime() - applicationRefreshStage.getStartTime());
    // init rootModuleStat
    ModuleStat rootModule = applicationRefreshStage.getChildren().get(0);
    rootModule.setStartTime(applicationRefreshStage.getStartTime());
    rootModule.setCost(rootModule.getEndTime() - rootModule.getStartTime());
    // report all stage
    startupReporter.addCommonStartupStat(jvmStartingStage);
    startupReporter.addCommonStartupStat(environmentPrepareStage);
    startupReporter.addCommonStartupStat(applicationContextPrepareStage);
    startupReporter.addCommonStartupStat(applicationContextLoadStage);
    startupReporter.applicationBootFinish();
}
Also used : StartupReporter(com.alipay.sofa.startup.StartupReporter) ModuleStat(com.alipay.sofa.boot.startup.ModuleStat) ChildrenStat(com.alipay.sofa.boot.startup.ChildrenStat) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException)

Example 2 with ModuleStat

use of com.alipay.sofa.boot.startup.ModuleStat in project sofa-boot by alipay.

the class StartupSpringContextInstallStage method doRefreshSpringContext.

@Override
protected void doRefreshSpringContext(DeploymentDescriptor deployment, ApplicationRuntimeModel application) {
    ModuleStat moduleStat = new ModuleStat();
    moduleStat.setName(deployment.getModuleName());
    moduleStat.setStartTime(System.currentTimeMillis());
    super.doRefreshSpringContext(deployment, application);
    moduleStat.setEndTime(System.currentTimeMillis());
    moduleStat.setCost(moduleStat.getEndTime() - moduleStat.getStartTime());
    moduleStat.setThreadName(Thread.currentThread().getName());
    ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) deployment.getApplicationContext();
    ConfigurableListableBeanFactory beanFactory = ctx.getBeanFactory();
    if (beanFactory instanceof BeanLoadCostBeanFactory) {
        moduleStat.setChildren(((BeanLoadCostBeanFactory) beanFactory).getBeanStats());
    }
    contextRefreshStageStat.addChild(moduleStat);
}
Also used : ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) ModuleStat(com.alipay.sofa.boot.startup.ModuleStat) BeanLoadCostBeanFactory(com.alipay.sofa.isle.spring.factory.BeanLoadCostBeanFactory) ConfigurableListableBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)

Example 3 with ModuleStat

use of com.alipay.sofa.boot.startup.ModuleStat in project sofa-boot by alipay.

the class IsleCheckStartupReporterTest method testStartupReporter.

@Test
public void testStartupReporter() {
    Assert.assertNotNull(startupReporter);
    StartupReporter.StartupStaticsModel startupStaticsModel = startupReporter.report();
    Assert.assertNotNull(startupStaticsModel);
    Assert.assertEquals(7, startupStaticsModel.getStageStats().size());
    BaseStat isleModelCreatingStage = startupReporter.getStageNyName(BootStageConstants.ISLE_MODEL_CREATING_STAGE);
    Assert.assertNotNull(isleModelCreatingStage);
    Assert.assertTrue(isleModelCreatingStage.getCost() > 0);
    BaseStat isleSpringContextInstallStage = startupReporter.getStageNyName(BootStageConstants.ISLE_SPRING_CONTEXT_INSTALL_STAGE);
    Assert.assertNotNull(isleSpringContextInstallStage);
    Assert.assertTrue(isleSpringContextInstallStage.getCost() > 0);
    Assert.assertTrue(isleSpringContextInstallStage instanceof ChildrenStat);
    Assert.assertEquals(1, ((ChildrenStat<?>) isleSpringContextInstallStage).getChildren().size());
    ModuleStat moduleStat = (ModuleStat) ((ChildrenStat<?>) isleSpringContextInstallStage).getChildren().get(0);
    Assert.assertNotNull(moduleStat);
    Assert.assertEquals("testModule", moduleStat.getName());
    Assert.assertTrue(moduleStat.getEndTime() > moduleStat.getStartTime());
    Assert.assertEquals(moduleStat.getCost(), moduleStat.getEndTime() - moduleStat.getStartTime());
    List<BeanStat> beanStats = moduleStat.getChildren();
    Assert.assertNotNull(beanStats);
    Assert.assertTrue(beanStats.size() >= 4);
    // test parent bean
    BeanStat parentBeanStat = beanStats.stream().filter(beanStat -> beanStat.getBeanClassName().contains("(parent)")).findFirst().orElse(null);
    Assert.assertNotNull(parentBeanStat);
    Assert.assertEquals(CHILD_INIT_TIME + PARENT_INIT_TIM, parentBeanStat.getRefreshElapsedTime(), 20);
    Assert.assertEquals(PARENT_INIT_TIM, parentBeanStat.getRealRefreshElapsedTime(), 20);
    Assert.assertEquals(PARENT_INIT_TIM, parentBeanStat.getAfterPropertiesSetTime(), 20);
    Assert.assertEquals(1, parentBeanStat.getChildren().size());
    Assert.assertEquals(ParentBean.class.getName() + " (parent)", parentBeanStat.getBeanClassName());
    // test child bean
    BeanStat childBeanStat = parentBeanStat.getChildren().get(0);
    Assert.assertNotNull(childBeanStat);
    Assert.assertEquals(CHILD_INIT_TIME, childBeanStat.getRealRefreshElapsedTime(), 15);
    Assert.assertEquals(CHILD_INIT_TIME, childBeanStat.getInitTime(), 10);
    Assert.assertEquals(0, childBeanStat.getChildren().size());
    Assert.assertEquals(ChildBean.class.getName() + " (child)", childBeanStat.getBeanClassName());
    // test sofa service
    BeanStat serviceBeanStat = beanStats.stream().filter(beanStat -> beanStat.getBeanClassName().contains("ServiceFactoryBean")).findFirst().orElse(null);
    Assert.assertNotNull(serviceBeanStat);
    Assert.assertTrue(serviceBeanStat.getRefreshElapsedTime() > 0);
    Assert.assertEquals(ServiceFactoryBean.class.getName() + " (sample)", serviceBeanStat.getBeanClassName());
    Assert.assertEquals("com.alipay.sofa.startup.test.beans.facade.SampleService", serviceBeanStat.getInterfaceType());
    // test sofa reference
    BeanStat referenceBeanStat = beanStats.stream().filter(beanStat -> beanStat.getBeanClassName().contains("ReferenceFactoryBean")).findFirst().orElse(null);
    Assert.assertNotNull(referenceBeanStat);
    Assert.assertTrue(referenceBeanStat.getRefreshElapsedTime() > 0);
    Assert.assertEquals(ReferenceFactoryBean.class.getName() + " (reference)", referenceBeanStat.getBeanClassName());
    Assert.assertEquals("com.alipay.sofa.startup.test.beans.facade.TestService", referenceBeanStat.getInterfaceType());
    // test extension bean
    BeanStat extensionBeanStat = beanStats.stream().filter(beanStat -> beanStat.getBeanClassName().contains("ExtensionFactoryBean")).findFirst().orElse(null);
    Assert.assertNotNull(extensionBeanStat);
    Assert.assertTrue(extensionBeanStat.getRefreshElapsedTime() > 0);
    Assert.assertEquals(ExtensionFactoryBean.class.getName(), extensionBeanStat.getBeanClassName());
    Assert.assertEquals("ExtensionPointTarget: extension", extensionBeanStat.getExtensionProperty());
    // test extension point bean
    BeanStat extensionPointBeanStat = beanStats.stream().filter(beanStat -> beanStat.getBeanClassName().contains("ExtensionPointFactoryBean")).findFirst().orElse(null);
    Assert.assertNotNull(extensionPointBeanStat);
    Assert.assertTrue(extensionPointBeanStat.getRefreshElapsedTime() > 0);
    Assert.assertEquals(ExtensionPointFactoryBean.class.getName(), extensionPointBeanStat.getBeanClassName());
    Assert.assertEquals("ExtensionPointTarget: extension", extensionPointBeanStat.getExtensionProperty());
}
Also used : StartupReporter(com.alipay.sofa.startup.StartupReporter) ChildrenStat(com.alipay.sofa.boot.startup.ChildrenStat) ModuleStat(com.alipay.sofa.boot.startup.ModuleStat) BeanStat(com.alipay.sofa.boot.startup.BeanStat) BaseStat(com.alipay.sofa.boot.startup.BaseStat) ExtensionFactoryBean(com.alipay.sofa.runtime.ext.spring.ExtensionFactoryBean) ExtensionPointFactoryBean(com.alipay.sofa.runtime.ext.spring.ExtensionPointFactoryBean) Test(org.junit.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 4 with ModuleStat

use of com.alipay.sofa.boot.startup.ModuleStat in project sofa-boot by alipay.

the class StartupContextRefreshedListener method start.

@Override
public void start() {
    StartupReporter startupReporter;
    try {
        startupReporter = applicationContext.getBean(StartupReporter.class);
    } catch (NoSuchBeanDefinitionException e) {
        // just happen in unit tests
        SofaLogger.warn("Failed to found bean StartupReporter", e);
        return;
    }
    // init ContextRefreshStageStat
    ChildrenStat<ModuleStat> stat = new ChildrenStat<>();
    stat.setName(APPLICATION_CONTEXT_REFRESH_STAGE);
    stat.setEndTime(System.currentTimeMillis());
    // build root ModuleStat
    ModuleStat rootModuleStat = new ModuleStat();
    rootModuleStat.setName(ROOT_MODULE_NAME);
    rootModuleStat.setEndTime(stat.getEndTime());
    rootModuleStat.setThreadName(Thread.currentThread().getName());
    // getBeanStatList from BeanCostBeanPostProcessor
    BeanCostBeanPostProcessor beanCostBeanPostProcessor = applicationContext.getBean(BeanCostBeanPostProcessor.class);
    rootModuleStat.setChildren((beanCostBeanPostProcessor.getBeanStatList()));
    // report ContextRefreshStageStat
    stat.addChild(rootModuleStat);
    startupReporter.addCommonStartupStat(stat);
}
Also used : StartupReporter(com.alipay.sofa.startup.StartupReporter) ModuleStat(com.alipay.sofa.boot.startup.ModuleStat) ChildrenStat(com.alipay.sofa.boot.startup.ChildrenStat) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException)

Example 5 with ModuleStat

use of com.alipay.sofa.boot.startup.ModuleStat in project sofa-boot by alipay.

the class StartupSpringApplicationRunListener method started.

@Override
public void started(ConfigurableApplicationContext context) {
    StartupReporter startupReporter;
    try {
        startupReporter = context.getBean(StartupReporter.class);
    } catch (NoSuchBeanDefinitionException e) {
        // just happen in unit tests
        SofaLogger.warn("Failed to found bean StartupReporter", e);
        return;
    }
    // refresh applicationRefreshStage
    ChildrenStat<ModuleStat> applicationRefreshStage = (ChildrenStat<ModuleStat>) startupReporter.getStageNyName(APPLICATION_CONTEXT_REFRESH_STAGE);
    applicationRefreshStage.setStartTime(applicationContextLoadStage.getEndTime());
    applicationRefreshStage.setCost(applicationRefreshStage.getEndTime() - applicationRefreshStage.getStartTime());
    // init rootModuleStat
    ModuleStat rootModule = applicationRefreshStage.getChildren().get(0);
    rootModule.setStartTime(applicationRefreshStage.getStartTime());
    rootModule.setCost(rootModule.getEndTime() - rootModule.getStartTime());
    // report all stage
    startupReporter.addCommonStartupStat(jvmStartingStage);
    startupReporter.addCommonStartupStat(environmentPrepareStage);
    startupReporter.addCommonStartupStat(applicationContextPrepareStage);
    startupReporter.addCommonStartupStat(applicationContextLoadStage);
    startupReporter.applicationBootFinish();
}
Also used : StartupReporter(com.alipay.sofa.startup.StartupReporter) ModuleStat(com.alipay.sofa.boot.startup.ModuleStat) ChildrenStat(com.alipay.sofa.boot.startup.ChildrenStat) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException)

Aggregations

ModuleStat (com.alipay.sofa.boot.startup.ModuleStat)11 StartupReporter (com.alipay.sofa.startup.StartupReporter)9 ChildrenStat (com.alipay.sofa.boot.startup.ChildrenStat)8 NoSuchBeanDefinitionException (org.springframework.beans.factory.NoSuchBeanDefinitionException)5 BaseStat (com.alipay.sofa.boot.startup.BaseStat)4 BeanStat (com.alipay.sofa.boot.startup.BeanStat)4 Test (org.junit.Test)4 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)4 BeanLoadCostBeanFactory (com.alipay.sofa.isle.spring.factory.BeanLoadCostBeanFactory)2 ExtensionFactoryBean (com.alipay.sofa.runtime.ext.spring.ExtensionFactoryBean)2 ExtensionPointFactoryBean (com.alipay.sofa.runtime.ext.spring.ExtensionPointFactoryBean)2 ConfigurableListableBeanFactory (org.springframework.beans.factory.config.ConfigurableListableBeanFactory)2 ConfigurableApplicationContext (org.springframework.context.ConfigurableApplicationContext)2 ContextRefreshStageStat (com.alipay.sofa.boot.startup.ContextRefreshStageStat)1