Ejemplo n.º 1
0
/*******************************************************************************
 * MAIN FUNCTION
*******************************************************************************/
int main(int ac, int **av)
{
	time_t now,load_set;
	int a;
	int timeunit=1;

	if( ac > 1 )
		timeunit = atoi(av[1]);
	
	printf("Started Program![%d]( default : 1 )\n",timeunit);

	fidb = &stNTAF;
	memset( &stNTPSTS,0x00,sizeof(stNTPSTS));
	memset( &stNTPSTS,0x00,sizeof(stNTPSTS));
	ucDStatus = fidb->hwntp[0] = 0;
	ucStatus = fidb->hwntp[1] = 0;
	memset(ucStatusFlag,0x00,16);
	

	while(EndFlag){
		now = time(&now);
		
		if( abs(now - load_set ) > timeunit)
		{
			//CheckNTPStS();
			cpu_compute();
			load_set = now ;
		}
	}

	printf("Finished Program!\n");
	return 0;
}
Ejemplo n.º 2
0
int main (int argc, char *argv[]) {
    int64_t time;

    if (argc < 2) {
        fprintf (stderr, "need image file source as arg\n");
	exit (1);
	}

    map_allocate (1);

    read_image (argv[1]);

    subr (A, B, SN, SM, SZ/8, &time, 0);

    printf ("%lld clocks\n", time);

    dump_image (B, "res_map.pgm");

    map_free (1);

    cpu_compute ("res_cpu.pgm");

    exit (0);
    }
Ejemplo n.º 3
0
/*******************************************************************************
 * MAIN FUNCTION
*******************************************************************************/
int main()
{
	pst_MsgQ	pstMsg;
    st_MsgQSub	stMsgQSub;
	st_Qentry   recvmesg;
#ifdef ENABLE_ENCLOSURE
	struct stat stStat;
#endif

	time_t	now, sw_set, dog_set, load_set, load_df;
	long   *pmsg;
	int		i, dRet, EndFlag, dfcnt, dMirrorCnt;
	char	szLoad[6], cOldMirrorStatus[MAX_ENDACE_COUNT], cOldMirrorActiveStatus[MAX_ENDACE_COUNT];

	st_SoldfList   dflist;

	EndFlag			= 1;

	for(i = 0; i < MAX_ENDACE_COUNT; i++)
	{
		cOldMirrorStatus[i]			= 0x00;
		cOldMirrorActiveStatus[i]	= 0x00;
	}

	/*** LOG INITIALIZATION****************************************************/
	log_init(S_SSHM_LOG_LEVEL, getpid(), SEQ_PROC_CHSMD, LOG_PATH"/CHSMD", "CHSMD");

	/*** BLOCK COUNT SETTING - CAUTION! TAF¿Í TAMÀÇ °³¼ö°¡ ´Ù¸£°í, System¸¶´Ù ´Ù¸§À» ±â¾ïÇÏÀÚ. */
	if( (dRet = dGetBlocks(FILE_MC_INIT,STR_TSW_COM)) < 0 ){

		log_print(LOGN_CRI,LH"ERROR GET McInit INF ",LT);
		exit(0);
	}

	dCurrBlockCnt = dRet;


	/* CHSMD °øÀ¯¸Þ¸ð¸® ¸Þ½ÃÁö Å¥ ÃʱâÈ­ */
	/***************************************************************************
	 * SHARED MEMORY INITIALIZATION
	***************************************************************************/
	if( (dRet = init_CHSMD()) < 0 ){

		log_print(LOGN_CRI,LH"FAILED IN init_CHSMD()",LT);
		exit(0);
	}

	if( (dRet = set_version(S_SSHM_VERSION, SEQ_PROC_CHSMD, vERSION)) < 0 ){
		log_print(LOGN_DEBUG,LH"set_version error(ret=%d,idx=%d,ver=%s)\n",LT, dRet,SEQ_PROC_CHSMD,vERSION);
		exit(0);
	}

	/*** READ SYSTEM CONFIG FILE **********************************************/
	memset(&dflist, 0x00, sizeof(st_SoldfList));
	if( (dRet = dGetSYSCFG(&dflist)) < 0)
	{
		log_print(LOGN_WARN, LH"FAILED IN dGetSYSCFG() dRet=%d", LT, dRet);
		exit(0);
	}
	gdSysNo = dRet;

	/*** CHECK DAG CARD TYPE **************************************************/
	if( (dRet = dCheckDagType()) < 0 ){

		log_print(LOGN_CRI,LH"FAILED IN dCheckDagType()=%d",LT,dRet );
		exit(0);
	}

	log_print(LOGN_CRI,LH"CHSMD %s Started",LT,vERSION);


	log_print(LOGN_DEBUG,LH"NTPCNT[%d] STATUSD[%d] STATUSC[%d]", LT,fidb->hwntpcnt, fidb->hwntp[0], fidb->hwntp[1]);

	/***************************************************************************
	* signal and ipc - msgq
	***************************************************************************/
	dRet = init_prcmd();
	if( dRet < 0 )
	{
		log_print(LOGN_DEBUG, LH"[FAIL] INIT_CHSMD() [%d]", LT,dRet );
		exit(1);
	}

	/*** g_dMirror_Term Àº »ç¿ëµÇÁö ¾ÊÀ½...¤Ì¤Ñ È°¿ëÇÒ ¼ö´Â ÀÖÀ» °Í °°À½, ±×·¡¼­ ³»ºñµÒ. */
	dRet = dInit_Mirror_Timer(&g_dMirror_Term);
	if( dRet < 0 ) {
		log_print( LOGN_CRI, LH"FAIL IN dInit_Mirror_Timer dRet: %d", LT,dRet );
		//exit(0);	//»ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ÁÖ¼®Ã³¸®ÇÔ. ¸¸¾à »ç¿ëÇÏ°Ô µÈ´Ù¸é exit(0)¸¦ È°¼ºÈ­½ÃÄÑ¾ß ÇÔ.
	}

#ifdef ENABLE_ENCLOSURE
	dRet = Init_Enclosure();
	if( dRet < 0 )
	{
		log_print(LOGN_DEBUG,LH"[ERROR] ENCLOSURE SERIAL FILE OPEN",LT);
		exit(0);
	}

	stat( FILE_MESSAGE, &stStat );
	gdMsgOldSize = stStat.st_size;
#endif

	/***************************************************************************
	* INITIAL CPU OLD VALUE SETTING
	***************************************************************************/
	for(i=0; i<2; i++) {
		cpu_compute();
		sleep(1);
	}

	now = time(&now);

	/* INITIALIZE CHSMD FIDB STATUS *******************************************/

	fidb->mpsw[SEQ_PROC_CHSMD] = STOP;
	fidb->mpswinfo[SEQ_PROC_CHSMD].pid = 0;

	while(EndFlag)
	{
		/***********************************************************************
		* CHECK MESSAGE QUEUE
		***********************************************************************/
		if( (dRet = IsRcvedMessage(&pstMsg)) > 0)
		{
			memcpy(&stMsgQSub, &pstMsg->llMType, sizeof(stMsgQSub));

			recvmesg.mtype = pstMsg->llMType;
			if( (recvmesg.mtype != KillMC) && (recvmesg.mtype != StartMC))
				memcpy(recvmesg.mtext, &pstMsg->szBody[0], sizeof(mml_msg));
			else
			{
				memcpy(recvmesg.mtext, &pstMsg->szBody[sizeof(long)], sizeof(long)*3);
				pmsg = (long *)&recvmesg;
				log_print(LOGN_DEBUG, LH"[TIFB] [%ld] [%ld] [%ld] ", LT,recvmesg.mtype, pmsg[1], pmsg[2]);
			}
		}
		else
			recvmesg.mtype = NO_MSG;

		switch(recvmesg.mtype)
		{
			case KillMC:	/*	KillMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö **********************/
				pmsg = (long*)&recvmesg;
				/* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */
				if( (pmsg[1] > 0) && (pmsg[1] < dCurrBlockCnt))
				{
					if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]);

					if(fidb->mpsw[pmsg[1]] != MASK)
						fidb->mpsw[pmsg[1]] = STOP;

					fidb->mpswinfo[pmsg[1]].pid		= 0;
					fidb->mpswinfo[pmsg[1]].when	= now;
				}

				if(pmsg[1] == 0)
				{
					if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]);

					killmcflag = 1;

					if(fidb->mpsw[pmsg[1]] != MASK)
						fidb->mpsw[pmsg[1]] = STOP;

					fidb->mpswinfo[pmsg[1]].pid		= 0;

					/*********************************************************
					pmsg[3] Àº T_Alm_StatusÀÇ type ÀÌ time_t¸¦ °®ºz tWhen °ª
					´Ü, long typeÀ¸·Î ¹Ù²î¾úÀ» °æ¿ì¿¡ ÇÑÇÔ
					*********************************************************/
					fidb->mpswinfo[pmsg[1]].when	= pmsg[3];
				}
				log_print(LOGN_DEBUG, LH"CHECK STATUS : [%ld] [0x%02x]", LT,pmsg[1], fidb->mpsw[pmsg[1]]);

				/*** pmsg[2] IS PROCESS ID ************************************/
				log_print(LOGN_CRI, LH"KillMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1],  pmsg[2], fidb->mpsw[pmsg[1]]);
				write_FIDB();
				break;

			case StartMC:	/*	StartMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö *********************/
				pmsg = (long*)&recvmesg;
				/*	ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID	*/
				if( (pmsg[1] >= 0) && (pmsg[1] < dCurrBlockCnt))
				{
					if( ((fidb->mpsw[pmsg[1]] == STOP) ||( fidb->mpsw[pmsg[1]] == CRITICAL)) && (fidb->mpswinfo[pmsg[1]].pid == 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, fidb->mpsw[pmsg[1]]);

					if(pmsg[1] == 0)
						log_print(LOGN_DEBUG, LH"CHSMD INFORMATION : [%ld] [0x%02x]", LT,pmsg[1], fidb->mpsw[pmsg[1]]);

					if(fidb->mpsw[pmsg[1]] == MASK)
						fidb->mpsw[pmsg[1]] = MASK;
					else if(fidb->mpsw[pmsg[1]] == NOT_EQUIP)
					{
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, CRITICAL);
						fidb->mpsw[pmsg[1]] = NORMAL;
					}
					else
						fidb->mpsw[pmsg[1]] = NORMAL;

					/* µÎ¹ø° °ªÀº pidÀÌ´Ù */
					fidb->mpswinfo[pmsg[1]].pid		= pmsg[2];
					fidb->mpswinfo[pmsg[1]].when	= now;
				}
				log_print(LOGN_CRI, LH"StartMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT, STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]);
				write_FIDB();
				/***************************************************************
				* BECAUSE FORK TIME PROBLEM
				***************************************************************/
				break;

			case NO_MSG:
				log_print(LOGN_DEBUG, LH"SKIP WHILE LOOP END",LT);
				EndFlag = 0;
				break;

			default:
				break;
		}
	}
	load_df = load_set = dog_set = sw_set = now;

	/***************************************************************************
	* MAIN WHILE LOOP START
	***************************************************************************/
	while(StopFlag)
	{
		/***********************************************************************
		* CHECK MESSAGE QUEUE
		***********************************************************************/
        if( (dRet = IsRcvedMessage(&pstMsg)) > 0)
		{
			memcpy(&stMsgQSub, &pstMsg->llMType, sizeof(stMsgQSub));

			recvmesg.mtype = pstMsg->llMType;
			if( (recvmesg.mtype != KillMC) && (recvmesg.mtype != StartMC))
			{
				memcpy(recvmesg.mtext, &pstMsg->szBody[0], sizeof(mml_msg));
				log_print(LOGN_DEBUG, LH"[MMC] RLEN[%d] BLEN[%d] PROID[%d] ", LT, dRet, pstMsg->usBodyLen, pstMsg->ucProID);
			}
			else
			{
				memcpy(recvmesg.mtext, &pstMsg->szBody[sizeof(long)], sizeof(long)*3);
				pmsg = (long*)&recvmesg;
				log_print(LOGN_DEBUG, LH"[TIFB] [%ld] [%ld] [%ld] [%ld] ", LT,recvmesg.mtype, pmsg[1], pmsg[2], pmsg[3]);
			}
		}
		else
			recvmesg.mtype = NO_MSG;

		switch(recvmesg.mtype)
		{
			case KillMC:	/* KillMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö **********************/
				pmsg = (long*)&recvmesg;
				/* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */
				if( (pmsg[1] > 0) && (pmsg[1] < dCurrBlockCnt))
				{
					if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]);

					if(fidb->mpsw[pmsg[1]] != MASK)
						fidb->mpsw[pmsg[1]] = STOP;

					fidb->mpswinfo[pmsg[1]].pid		= 0;
					fidb->mpswinfo[pmsg[1]].when	= now;
				}

				if(pmsg[1] == 0)
				{
					if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]);

					killmcflag = 1;

					if(fidb->mpsw[pmsg[1]] != MASK)
						fidb->mpsw[pmsg[1]] = STOP;

					fidb->mpswinfo[pmsg[1]].pid		= 0;
					fidb->mpswinfo[pmsg[1]].when	= pmsg[3];
				}
				Send_ALMD();

				/*** pmsg[2] IS PROCESS ID ************************************/
				log_print(LOGN_CRI, LH"KillMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]);
				write_FIDB();
				break;

			case StartMC:	/*	StartMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö *********************/
				pmsg = (long*)&recvmesg;
				/* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */
				if( (pmsg[1] >= 0) && (pmsg[1] < dCurrBlockCnt))
				{
					if( ((fidb->mpsw[pmsg[1]] == STOP) || (fidb->mpsw[pmsg[1]] == CRITICAL)) && (fidb->mpswinfo[pmsg[1]].pid == 0))
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, fidb->mpsw[pmsg[1]]);

					if(fidb->mpsw[pmsg[1]] == MASK)
						fidb->mpsw[pmsg[1]] = MASK;
					else if(fidb->mpsw[pmsg[1]] == NOT_EQUIP)
					{
						Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, CRITICAL);
						fidb->mpsw[pmsg[1]] = NORMAL;
					}
					else
						fidb->mpsw[pmsg[1]] = NORMAL;

					fidb->mpswinfo[pmsg[1]].pid		= pmsg[2];
					fidb->mpswinfo[pmsg[1]].when	= now;
				}
				Send_ALMD();

				/*	µÎ¹ø° °ªÀº pidÀÌ´Ù	*/
				log_print(LOGN_CRI, LH"StartMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1],  pmsg[2], fidb->mpsw[pmsg[1]]);
				write_FIDB();
				/***************************************************************
				* BECAUSE FORK TIME PROBLEM
				***************************************************************/
				sleep(2);
				break;

			case NO_MSG:
				break;

			default:
				if( (dRet = MMC_Handle_Proc((mml_msg*)recvmesg.mtext, recvmesg.mtype, pstMsg->llIndex)) < 0)
					log_print(LOGN_WARN, LH"[MAIN]FAILED IN MMC_Handle_Proc[%d]", LT,dRet);
				write_FIDB();
				break;
		}
		now = time(&now);

		/***********************************************************************
		* CHECK PROCESS STATUS PER 2 SECOND
		***********************************************************************/
		if( abs(now - sw_set ) > PROC_CHECK_LIMIT)
		{
			log_print(LOGN_INFO,LH"[CHECK SOFTWARE]",LT);
			check_software();
			sw_set = now ;
		}

		/***********************************************************************
		* CHECK CPU, MEMORY LOAD PER 1 SECOND
		***********************************************************************/
		if(abs(now-load_set) > HW_CHECK_LIMIT)
		{
			if( (dRet = dLinkCheck()) < 0)
				log_print( LOGN_CRI, LH"ERROR IN dLinkCheck() dRet=%d", LT, dRet);

			cpu_compute();
			mem_compute();
			queue_compute();
			nifo_compute();
			dCheckHW();
			CheckNTPStS();

			load_set = now ;
		}

		/***********************************************************************
		* CHECK DISK LOAD PER 60 SECOND
		***********************************************************************/
		if(abs(now-load_df) > DISK_CHECK_LIMIT)
		{
			log_print(LOGN_DEBUG, LH"[CHECK DISK LOAD]",LT);
			dGetDF(&dflist);
			for(dfcnt = 0; dfcnt < dflist.dCount; dfcnt++)
			{
				sprintf(szLoad, "%5.2f", (double)(100.0 - dflist.stSoldf[dfcnt].dPercent));
				log_print(LOGN_INFO, LH" DF USAGE =%s", LT,szLoad);

				fidb->disksts[dfcnt].llCur	= dflist.stSoldf[dfcnt].llUsed;
				fidb->disksts[dfcnt].lMax	= dflist.stSoldf[dfcnt].llTotal;

				dCheckLoad(INVTYPE_DISK, dfcnt, szLoad);
				log_print(LOGN_DEBUG, LH"DCHECKLOAD  MPDISK = [%s] OLDSTAT = [0x%x]", LT,szLoad, (char)disk_oldstat[dfcnt]);
			}
			load_df = now ;
		}

		for(dMirrorCnt = 0; dMirrorCnt < MAX_ENDACE_COUNT; dMirrorCnt++)
		{
			if(cOldMirrorStatus[dMirrorCnt] == 0x00)
				cOldMirrorStatus[dMirrorCnt]	= fidb->mirrorsts[dMirrorCnt];
			else
			{
				if(cOldMirrorStatus[dMirrorCnt] != fidb->mirrorsts[dMirrorCnt])
				{
					Send_AlmMsg(LOCTYPE_PHSC, INVTYPE_MIRROR_STS, dMirrorCnt+1, fidb->mirrorsts[dMirrorCnt], cOldMirrorStatus[dMirrorCnt]);
					cOldMirrorStatus[dMirrorCnt]	= fidb->mirrorsts[dMirrorCnt];
				}
			}

			if(cOldMirrorActiveStatus[dMirrorCnt] == 0x00)
				cOldMirrorActiveStatus[dMirrorCnt]	= fidb->mirrorActsts[dMirrorCnt];
			else
			{
				if(cOldMirrorActiveStatus[dMirrorCnt] != fidb->mirrorActsts[dMirrorCnt])
				{
					Send_AlmMsg(LOCTYPE_PHSC, INVTYPE_MIRROR_ACT, dMirrorCnt+1, fidb->mirrorActsts[dMirrorCnt], cOldMirrorActiveStatus[dMirrorCnt]);
					cOldMirrorActiveStatus[dMirrorCnt]	= fidb->mirrorActsts[dMirrorCnt];
				}
			}
		}
	}

	/***************************************************************************
	* WHEN CHSMD IS DEAD
	***************************************************************************/
	if(killmcflag != 1)
	{
		if( (fidb->mpsw[SEQ_PROC_CHSMD] == NORMAL) && (fidb->mpswinfo[SEQ_PROC_CHSMD].pid != 0))
			Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, SEQ_PROC_CHSMD, STOP, fidb->mpsw[SEQ_PROC_CHSMD]);

		fidb->mpsw[SEQ_PROC_CHSMD]	= STOP;
		fidb->mpswinfo[SEQ_PROC_CHSMD].pid	= 0;
		fidb->mpswinfo[SEQ_PROC_CHSMD].when	= -1;
	}
	write_FIDB();
	FinishProgram();

	return 0;
}