API командной строки MKS Integrity

Есть ли у кого-нибудь здесь опыт создания синтаксического анализатора для API командной строки MKS Integrity. Я планирую создать API (на С#), и мне нужно будет создать анализатор результатов CLI, который я мог бы использовать для анализа результатов из CLI. Я слышал, что результаты CLI не соответствуют какой-либо конкретной структуре данных (нет разделителей полей и т. д.) и могут меняться от версии к версии. Это правда? Я слышал о API JAVA и ANSI C, но также слышал, что они не поддерживают все функции, предоставляемые CLI. Любой отзыв будет очень полезен.

Спасибо и С уважением, Джо.


person Joe Varghese    schedule 16.05.2013    source источник


Ответы (5)


Удачи. Чрезвычайно сложно анализировать вывод MKS. Например, команда «si viewsandbox» указывает структуру подпроекта с помощью отступа. Вот фрагмент кода Perl для сопоставления участников с подпроектами:

our %parentproject;
our @projects;
my @subprojects;
$subprojects[0] = $sandbox;
$projects[0] = $sandbox;
open MKS, "si viewsandbox -R -S $sandbox |" or die $!;
while () {
    chomp;
    next if /working file/i;
    next if /new revision available/i;
    my ($indentation, $filename, $project, $version, $type);
    if (m:^( +)$dir/(.+) archived (.+) *$:) {
        ($indentation, $filename, $version) = ($1, $2, $3);
    }
    if (m:^( +)$dir/(.+project) (\((.+)\) )?(.*subsandbox) *$:) {
        ($indentation, $project, $version, $type) = ($1, $2, $4, $5);
    }
    next unless $indentation;
    my $level = length($indentation) / 2 + 1;
    if ($project) {
        $subprojects[$level] = $project;
        $parentproject{$project} = $subprojects[$level - 1];
        push @projects, $project;
    }
    if ($filename) {
        $parentproject{$filename} = $subprojects[$level - 1];
    }
}

Этот скрипт работает в Linux, поэтому разделителями папок являются /. Вы можете использовать \ в некоторых регулярных выражениях в Windows.

Пожалуйста, найдите время, чтобы оценить красоту продукции MKS. Прямые члены проекта с отступом 1. Члены подпроекта с отступом 3. Члены подпроекта подпроекта с отступом 5. И так далее.

Я бы сдался и написал специальные сценарии там, где это абсолютно необходимо, но не более того. И да, вывод меняется между версиями. Иногда.

person SzG    schedule 25.06.2013
comment
Спасибо @SzG. Да, я изучаю это (анализ ответов CLI) трудным путем :). Держим кулачки.!! - person Joe Varghese; 02.07.2013

Попробуйте опцию --xmlapi с вашими командами и получите ответ в формате XML.

С наилучшими пожеланиями,

Аксель

person Axel    schedule 07.11.2013
comment
Привет, Аксель, Не могли бы вы предоставить больше информации об этом. Вы имеете в виду, что клиент PTC (MKS) имеет XML API, если да, не могли бы вы поделиться версией, на которую вы ссылаетесь (и примером команды cmd-line). Мой API должен поддерживаться, начиная с PTC/MKS версии 2009 и выше. - person Joe Varghese; 18.11.2013

@ Джо Варгезе, не уверен, что вы все еще работаете над этим, но (на win7 с MKS Integrity 2009) я могу сделать вот что:

информация о членах --xmlapi [имя_файла_идет_сюда]

Что даст вам вывод в XML:

<?xml version="1.0"?>
<Response command="memberinfo" app="si" version="4.10.0 7-1 9665">
  <App-Connection port="7001" userID="some_ID" server="some_server"></App-Connection>
  <WorkItems selectionType="IMemberSelection">
    <WorkItem id="some_path_to_a_file" context="c:/Groups/MKS/IntegrityServer/some_path_to_a_project.pj" displayId="some_path_to_a_file" modelType="si.Member">
      <Field name="membername">

...

Вам нужно добавить их (или эквивалентные на вашем компьютере) в переменную Windows PATH, чтобы она могла видеть команды MKS CLI:

C:\Program Files (x86)\MKS\IntegrityClient\bin;

C:\Program Files (x86)\MKS\Toolkit\mksnt;

Удачи.

person user1742230    schedule 19.06.2015
comment
Спасибо за информацию. Да, xmlApi обеспечивает удобочитаемый вывод, но согласно MKS (PTC) XmlApi официально не поддерживается. Это риск, на который мы не можем пойти. :( - person Joe Varghese; 23.06.2015

имейте в виду, что не все команды доступны через CLI или java API (см. некоторые примеры внизу)

жаль, что начиная с PTC Integrity 10.5 вы не можете полагаться только на один из них для автоматизации своей деятельности.

также жаль, что PTC Integrity не дает много информации о том, насколько все это стабильно. Я предполагаю, что API более стабилен (как и в других инструментах).

поэтому, в зависимости от ваших вариантов использования, вам может понадобиться использовать CLI и параметр --xmlapi и проанализировать вывод (это ад).

что касается C #, java и т. д., все зависит от вас. API находится на Java, но вы, конечно, можете вызывать его из C #, Python и т. д. с соответствующими оболочками. В последнее время я склоняюсь к использованию Groovy...

например для PTC Integrity 10.5 на стороне CM (аналогичные результаты вы можете получить на стороне IM) здесь некоторые команды доступны только через API, а не через CLI:

  • проектдобавить
  • проектци
  • проектко

а здесь некоторые команды доступны только через CLI, а не через API:

  • acceptcp
  • добавить метку
  • addmemberattr
  • добавить проект
  • добавитьметку проекта
  • аддпроектметрик
  • applycp ... (всего 81)
person YaP    schedule 03.08.2015

Мое решение проблем, типов, полей и т. д. состояло в том, чтобы проанализировать вывод, когда я вижу строку с текстом, в котором нет начальных пробелов, но есть двоеточие, это пара ключ: значение. Если следующая строка начинается с пробела, я мог бы добавить, но я отбрасываю вывод, включая предыдущую строку. Только строки, которые соответствуют стандартному ключу: значение, анализируются напрямую.

Затем для тех имен полей, которые я выбросил, я сделаю следующее (пример здесь как проблема):

im выдает --fields='list,of,fieldnames' item#, а затем анализирует их, разделенные вкладками. Если ваше поле может содержать вкладку, я извлекаю ее отдельно без других полей. Затем у меня есть ассоциативный массив perl с парами ключ=значение.

Я знаю, что это не самый эффективный способ, но, похоже, он точно извлекает поля для синтаксического анализа.

У меня есть еще одна функция в Perl, которую я собрал, которая читает тип, поле, запрос, презентации (как XML). Это намного сложнее. Как только я очистил его больше, я могу вернуться, чтобы сделать репост.

person Mark Hall    schedule 29.09.2015