Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Идентифицировать класс Cache / 16 сообщений из 16, страница 1 из 1
11.02.2014, 11:44
    #38556815
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Добрый день, уважаемые форумчане.
Вот мне необходимо идентифицировать класс Cache, который хранится в памяти на диске.
Т.е. посчитать его контрольную сумму и сравнить с той, что где-то на бумажке.
Если я буду использовать следующий методClass Test.ClassCRC [ Abstract ]
{
/// do ##class(Test.ClassCRC).GetCRC()
ClassMethod GetCRC()
{
  Write !!
  Set obj=##class(%Dictionary.CompiledClass).%OpenId("Kernel.BaseAlgorithm")
  Write !, "CRC = ",obj.Hash
  Set obj = ""
}
}
То правильно ли это будет?
Я заметил, что комментарии класса </// Комментарий например>
Таким способом не отслеживается.
Кто что скажет по этому поводу?
Может не туда я полез в своих поисках?

Заранее благодарен.
...
Рейтинг: 0 / 0
11.02.2014, 11:59
    #38556829
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
AlexKB,

Это наверно не совсем верный способ, если вы хотите чтобы изменялся хеш класса, если он в любом месте изменился.
Лучше воспользоваться экспортом в поток, а потом, считать хеш на поток
т.е. что-то типа
Код: plaintext
$system.OBJ.ExportToStream("Test.Class.CLS",.stream,"/diffexport")

/diffexport - нужен чтобы не попала дата последней компиляции
можно еще поставить
/exportversion=2010.2 - чтобы не менялась версия в заголовке, если проверка под разными версиями, доступно с 2012.2
<Export generator="Cache" version="24">

после всего этого можно и хеш посчитать
w $system.Encryption.SHAHashStream(256,stream)
...
Рейтинг: 0 / 0
11.02.2014, 12:15
    #38556865
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
DAiMor,
Спасибо!
Я вот в начале и думал так, мол экспортнуть в поток, или файл, а там уже и считать.
Но вот смутило меня, что есть уже такое свойство <Hash>, которое содержит контрольную сумму. Потыкал, вроде отслеживает изменения, но оказалось, что не все.
А где узнать про квалификатор <qspec>, про его возможные комбинации?

Для меня это не праздный вопрос - у нас существует такое понятие, как "метрологическая аттестация программного обеспечения". Все ПО должно быть разделено на "метрологически значимое ПО" и "метрологически не значимое ПО". Первое должно быть защищено контрольной суммлой и на него должен быть получен некий "сертификат".
...
Рейтинг: 0 / 0
11.02.2014, 12:22
    #38556876
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Мы тоже сертифицируем наше ПО. Но в нашем случае правда мы контрольные суммы считали на OBJ код, в том числе и для классов. Делается это в процессе сборки нашей версии.

Код: plaintext
d $system.OBJ.ShowQualifiers()
Там очень длинный вывод, так что лучше его перенаправить в файл.
...
Рейтинг: 0 / 0
11.02.2014, 12:30
    #38556887
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
DAiMor,
Фу ты елки - Семен, Семеныч...
Знал же про это...
...
Рейтинг: 0 / 0
11.02.2014, 12:35
    #38556895
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
DAiMor,
Спасибо Вам большое и долгих лет жизни в нашем сообществе!!!
...
Рейтинг: 0 / 0
11.02.2014, 12:37
    #38556897
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
AlexKBDAiMor,
Спасибо Вам большое и долгих лет жизни в нашем сообществе!!!Спасибо
...
Рейтинг: 0 / 0
11.02.2014, 12:42
    #38556907
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Нас в своё время заставили купить сертифицированную программу подсчёта контрольных сумм - ФИКС-2 (кажется). Т.е. считать CRC самостоятельно не всегда легитимно, зависит от требований.
...
Рейтинг: 0 / 0
11.02.2014, 12:43
    #38556911
AlexKB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Alexey Maslov,
Мда-а, ценное замечание...(((
...
Рейтинг: 0 / 0
11.02.2014, 12:46
    #38556924
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Alexey MaslovНас в своё время заставили купить сертифицированную программу подсчёта контрольных сумм - ФИКС-2 (кажется). Т.е. считать CRC самостоятельно не всегда легитимно, зависит от требований.Нас вроде не заставляли, покупать саму программу, приезжал парень, из конторы которая нам помогает сертифицироваться, и с тоже этой программой, ФИКС 2.0.2. Эта программулина у нас не запустилась на машине где сборка версии делается.
...
Рейтинг: 0 / 0
11.02.2014, 12:53
    #38556942
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Даже не помню, чтобы мы её пытались запускать. Для сертификатора достаточно было факта покупки :)
...
Рейтинг: 0 / 0
11.02.2014, 12:56
    #38556945
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Alexey MaslovДаже не помню, чтобы мы её пытались запускать. Для сертификатора достаточно было факта покупки :)А мы вытаскивали все наши исходники в папочку, натравливали эту программу на папку, получался, лог с контрольными суммами, его они забирали и все. Исходники мы не даем.
...
Рейтинг: 0 / 0
11.02.2014, 13:24
    #38557009
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
AlexKBЯ заметил, что комментарии класса </// Комментарий например>
Таким способом не отслеживается.
Кто что скажет по этому поводу?Class Test.ClassCRC [ Abstract ]
{
/// do ##class(Test.ClassCRC).GetCRC()
ClassMethod GetCRC()
{
  s hash=$$GetClassHash^%R("Kernel.BaseAlgorithm",,$$$NO)
  s hashFull=$$GetClassHash^%R("Kernel.BaseAlgorithm",,$$$YES)
  
  w "hash = ",$lts(hash),!,"hashFull = ",$lts(hashFull),!
}
}
$$GetClassHash возвращает хеш в формате $LB(Hash1,Hash2), по аналогии с хранимой процедурой
call %Dictionary.ClassDefinitionQuery_ClassIndex()

PS: полный хеш учитывает и комментарии.
...
Рейтинг: 0 / 0
11.02.2014, 13:46
    #38557043
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
DAiMorА мы вытаскивали все наши исходники в папочку, натравливали эту программу на папку...Конечно, мы тоже один раз эту процедуру проделали - при подготовке документов к сертификации. Но внедрять проверку CRC в промэксплуатацию, конечно же, не стали, иначе бы ничего никогда не внедрили :) К счастью, заказчик на фиксации исходников не настаивал.
...
Рейтинг: 0 / 0
11.02.2014, 13:52
    #38557061
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
Особой проверки у нас нет, есть только сбор контрольных сумм при сборке версии
после этого на рабочей системе, админ может запустить контроль контрольных сумм, который выведет расхождения. Но проверка только по OBJ коду.

Основная проблем была, это безопасность сохраняемых данных
Типа если у нас пользователь сохранил файл, и потом удалил из системы, он должен реально быть удален.
Файлы хранятся в БД у нас. и делали забивание нулями стрима а потом удаление из бд.
...
Рейтинг: 0 / 0
11.02.2014, 14:03
    #38557086
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Идентифицировать класс Cache
DAiMorФайлы хранятся в БД у нас. и делали забивание нулями стрима а потом удаление из бд.Красивый ход! Ещё один довод в пользу хранения стримов в БД. Хранись они в файловой системе, вы по-простому бы не выкрутились...
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Идентифицировать класс Cache / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]